Ответ на запрос от Node.js с использованием обещаний
-
21-12-2019 - |
Вопрос
Я пытаюсь настроить сценарий 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);
Не связан с StackOverflow