>我有一个网络服务器,它根据要求拨打电话,等待 3 秒钟,然后检查该电话是否仍在进行中。我用setTimeout
来集成它,但这会阻止与 Web 服务器的所有其他连接,直到超时结束。
// example get request
app.get("/", function(req, res) {
// take an action
example.makeCall(function() {
setTimeout(function() {
// check the action
example.checkCall(function() {
res.status(200)
})
}, 3000)
})
})
是否有其他方法可以在不阻止所有其他传入请求的情况下向请求添加超时?
不确定为什么您的其他 API 请求被阻止,新的 API 请求应在调用堆栈上使用路由回调函数的新调用,并且不应依赖于先前完成的回调函数添加到调用堆栈。
问题可能不是 setTimeout 阻塞,而是另一个问题,例如您的电话调用 API 阻止在上一个调用完成之前进行的新调用。
但是可以尝试的是等待 3 秒钟,以尝试绕过潜在的阻塞。
function waitThree() {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, 3000);
});
}
app.get("/", function(req, res) {
// take an action
example.makeCall(function() {
waitThree.then(function() {
example.checkCall(function() {
res.status(200)
});
});
})
});