我有一个hapi.js我想推迟响应的路线。我尝试过存储reply
函数并稍后调用它,或者将其包装在 Promise 中,但 hapi 总是立即响应 500 内部服务器错误响应。
存储回复以供稍后使用:
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)
hapi 是否可以从路由处理程序外部异步回复请求?