Как ответить извне обработчика маршрута hapi.js
у меня естьhapi.js маршрут, где я хочу отложить ответ. Я пытался сохранитьreply
функция и вызов его позже, или завернуть его в обещание, но хапи всегда немедленно отвечает ответом 500 Internal Server Error.
Сохраните ответ на потом:
var pendingReplies = {};
server.route({
method: "POST",
path: "/",
handler: function (request, reply) {
var id = generateId();
pendingReplies[id] = reply;
}
});
... // reply later by calling:
function sendResponse(id, data) {
pendingReplies[id](data);
}
Я пытался создать обещание ответить:
handler: function (request, reply) {
var id = generateId();
return new Promise(function (resolve, reject) {
pendingReplies[id] = resolve;
}).then(function (data) {
return reply(data);
});
}
Я пытался использоватьreply().hold()
handler: function (request, reply) {
var id = generateId();
var response = reply().hold();
pendingReplies[id] = function (data) {
response.source = data;
response.send();
};
return response;
}
Я пытался использоватьreply().hold()
с обещанием:
handler: function (request, reply) {
var id = generateId();
var response = reply().hold();
return new Promise(function (resolve, reject) {
pendingReplies[id] = resolve;
}).then(function (data) {
response.source = data;
response.send();
return response;
});
}
С каждым из них, как только завершается работа с обработчиком, я получаю ответ 500 и следующий вывод в консоли узла:
Debug: internal, implementation, error Error: Uncaught error: socket hang up at createHangUpError (_http_client.js:198:15) at Socket.socketOnEnd (_http_client.js:283:23) at emitNone (events.js:72:20) at Socket.emit (events.js:163:7) at _stream_readable.js:891:16 at process._tickDomainCallback (node.js:388:13)
Можно ли с помощью хапи отвечать на запрос асинхронно извне обработчика маршрута?