Meteor.call() を同期的に (コールバックなしで) 実行すると、ある場所からダウンロードされ、サーバー上にファイルが正常に生成されます。
ただし、ファイルの生成に数秒かかる場合があり、ファイルが存在する前にリダイレクトします。
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;
}
}