Web服务器的非块setTimeout

问题描述 投票:0回答:1

我有一个Web服务器,根据请求拨打电话,等待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)
  })
})

是否有其他方法可以在不阻止所有其他传入请求的情况下向请求添加超时?

javascript http express web timeout
1个回答
0
投票

不确定为什么您的其他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)
      });
    });
  })
});
© www.soinside.com 2019 - 2024. All rights reserved.