Я выполняю 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;
}
}
проблема заключается в том, что перенаправление происходит слишком рано. Мне интересно, есть ли способ подождать, пока этот файл будет полностью доступен, прежде чем перенаправлять туда. я использую Router или window.location не имеет значения. – KJW
Если .to работает для вас, то я думаю, что все в порядке, вы должны следовать парадигме фьючерсов, изложенной по адресу: https://gist.github.com/possibilities/3443021. Я думаю, что ваши возвращаемые данные перед вызовом перед файлом готовы. Вы также не разместили свой код для вызова? Вы непосредственно дожидаетесь выполнения кода во время выполнения? – Akshat