我同步执行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;
}
}
答案 0 :(得分:0)
Meteor的路由器.to
功能仅用于客户端,用于调用路由回调。它不会告诉浏览器物理重定向,只根据模板和模板交换DOM以反映新页面。你的路线是。
如果您想重定向,请使用
window.location = 'newurl';
或用户点击从.call
回调中创建的链接。