2

我正在尝试设置一个 Node.js 脚本来使用 ECMAScript 6 承诺。我能够在 Node 脚本中完成我需要的工作,这需要多次获取外部服务器(因此在时间上很昂贵),但无法响应客户端,因为 Promises 构造导致对响应的引用丢失(所以我猜)。

如何将 Response 对象传播到最后的 Promisesthen()并回复请求?

var http = require("http");
var Promise = require('es6-promise').Promise;
//...

var promise = new Promise(function(resolve, reject){
   //...
   var req = http.request(options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function (data) {
         buffer += data.toString();
      });
      res.on('end',function(d){
         //...stuff done with buffer...
         return resolve(0);
      });
  });

  req.end();
});

promise.then(function(i){

   //...expensive work on array...

   return Promise.all(myArrayData);
});

promise.then(function(result){
   //...want to reply to the request here, e.g.,...
   res.write(result);
});
4

1 回答 1

3

您只需将服务调用放在路由处理程序中:

app.get("/",function(req,res){
    myService().then(function(result){
        res.write(result);
        // res.end();
    });
});

就像在同步代码中一样,您在希望执行的上下文中调用函数:

var data = myService();
doSomethingWith(data);
于 2014-04-12T00:00:36.017 回答