【发布时间】:2018-09-22 11:20:48
【问题描述】:
我有一个 API 端点,它执行一个函数,该函数又通过 Web 套接字监听一些事件,然后通过回调将它的响应返回给 api 端点,因此端点可以用这个对象响应http 请求。
有时我只收到一个事件,有时我从侦听器收到两个事件。当只出现第一个事件时,我没有问题。因为第二个事件有优先级,所以我使用setTimeout 等待它,以防它仍然出现。
问题在于,当第二个事件出现时,我的 API 端点用它的对象进行响应,但之后它崩溃了。我想它与第二个回调有关,我不知道如何处理它。这就是代码的结构:
app.get('/api/myendpoint', function(req, res) {
myVar_1 = req.query.myvar1;
myVar_2 = req.query.myvar2;
myFunction(myVar_1, myVar_2, function(data, error) {
if (!error) res.json(data);
else res.json({"error": String(error)});
});
});
function myFunction(myVar_1, myVar_2, callback){
listenOnSocket.someEvent(myVar_1,
function(error, event) {
if (error) callback(null, error);
else setTimeout(function() {callback(event, null);}, 6000);
}
);
listenOnSocket.someEvent(myVar_2,
function(error, event) {
if (!error) callback(event, null);
else callback(null, error);
}
);
};
这是我的错误的样子:
错误 [ERR_HTTP_HEADERS_SENT]:发送后无法设置标头 给客户
【问题讨论】:
-
我注意到
myFunction接受两个参数,但在请求处理程序中调用了三个参数,并且myFunction的主体调用了函数中未定义的回调。跨度> -
已更新代码@QuiltyKim
-
我认为首先发生的是
1st事件,您设置了超时以在一段时间后调用回调函数。然后2nd事件发生,它执行回调并发送标头。然后,当超时完成并执行第一个函数的回调时,您将再次发送响应。
标签: node.js api express callback http-headers