Вопрос

Я пытаюсь настроить сценарий Node.js для использования обещаний ECMAScript 6.Я могу выполнить необходимую мне работу в сценарии Node, который требует большого количества выборок с внешнего сервера (поэтому это временно дорого), но я не могу ответить клиенту, потому что конструкция Promises приводит к потере ссылки на ответ (поэтому Я предполагаю).

Как я могу распространить объект Response на последние обещания then() и ответить на запрос?

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);
});
Это было полезно?

Решение

Вам просто нужно поместить вызов службы внутри обработчика маршрута:

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

Как и в синхронном коде, вы вызываете функцию в том контексте, в котором хотите ее выполнить:

var data = myService();
doSomethingWith(data);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top