2013-09-05 2 views
0

Я выполняю Meteor.call() синхронно (без обратных вызовов), который загружается из местоположения и генерирует файл на сервере успешно, а затем Meteor.Router.to ('/ file/generated.just.now ');Метеор: подождите, пока не будет создан файл

Однако иногда файл занимает несколько секунд, чтобы сгенерировать, и я перенаправляю файл до его существования.

Я пытался использовать фьючерсы и волокна, но не уверен, что это может привести к блокировке (дождитесь окончания записи файла);

if (Meteor.isServer) { 
    var request = Npm.require('request'); 
    var fs = Npm.require('fs'); 
    var Future = Npm.require('fibers/future'), wait = Future.wait; 
    Fiber = Npm.require('fibers'); 

var result = function(){ 
      downloadAndSaveFile(content.pdf, filename).wait(); 
      }.future(); 

function downloadAndSaveFile(fileUrl, fileName) { 
    var future = new Future; 
    request(fileUrl).pipe(fs.createWriteStream(getPath() + fileName)).on('closed', function(){ 
     future.return(); 
    }); 
    return future; 
    } 

} 

ответ

0

метеора функция маршрутизатора .to только на стороне клиента, используется для вызова маршрутизации обратных вызовов. Он не указывает браузеру физически перенаправлять, заменяет только DOM, чтобы отобразить новую страницу в соответствии с шаблонами & ваших маршрутов.

Если вы хотите перенаправить вы должны использовать

window.location = 'newurl'; 

или ссылку, что пользователь нажмет создал из .call обратного вызова.

+0

проблема заключается в том, что перенаправление происходит слишком рано. Мне интересно, есть ли способ подождать, пока этот файл будет полностью доступен, прежде чем перенаправлять туда. я использую Router или window.location не имеет значения. – KJW

+1

Если .to работает для вас, то я думаю, что все в порядке, вы должны следовать парадигме фьючерсов, изложенной по адресу: https://gist.github.com/possibilities/3443021. Я думаю, что ваши возвращаемые данные перед вызовом перед файлом готовы. Вы также не разместили свой код для вызова? Вы непосредственно дожидаетесь выполнения кода во время выполнения? – Akshat

Смежные вопросы