0

我做一个 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;
  }

}
4

1 回答 1

0

Meteor 的路由器.to功能仅在客户端,用于调用路由回调。它不会告诉浏览器进行物理重定向,只是根据模板和您的路线换出 DOM 以反映新页面。

如果你想重定向你应该使用

window.location = 'newurl';

.call或者用户单击从回调创建的链接。

于 2013-09-05T00:35:30.857 回答