我做一个 Meteor.call() 同步(没有回调),它从一个位置下载并成功在服务器上生成一个文件,然后 Meteor.Router.to('/file/generated.just.now');
但是,有时该文件需要几秒钟的额外时间才能生成,并且我会在该文件存在之前重定向到该文件。
我尝试使用 Futures 和 Fibers,但不确定这是否可以实现阻塞(等到文件完成写入);
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;
}
}