Meteor:等到文件生成

时间:2013-09-05 00:24:55

标签: javascript node.js meteor future

我同步执行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;
  }

}

1 个答案:

答案 0 :(得分:0)

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

如果您想重定向,请使用

window.location = 'newurl';

或用户点击从.call回调中创建的链接。