有超时的node.jsasynchronous请求?

在node.js中,是否有可能使asynchronous调用超时(如果时间太长(或不完成))并触发默认callback?

细节:

我有一个node.js服务器接收请求,然后在响应之前在后台asynchronous地发出多个请求。 这个基本问题已经被一个现有的问题所覆盖,但是其中一些被认为是“很好的”。 我的意思是,如果我们得到回应,那么它会加强对客户的回应,但是如果回复太久,最好及时回应客户,而不是回应。

同时,这种方法可以防止简单地没有完成或失败的服务,同时允许主要操作线程作出响应。

您可以像使用具有一组核心search结果的Googlesearch一样来思考,但会根据其他幕后查询提供额外的响应。

如果简单的话只使用setTimout

 app.get('/', function (req, res) { var result = {}; // populate object http.get('http://www.google.com/index.html', (res) => { result.property = response; return res.send(result); }); // if we havent returned within a second, return without data setTimeout(function(){ return res.send(result); }, 1000); }); 

编辑 :如peteb所述我忘了检查,看看我们是否已经发送。 这可以通过使用res.headerSent或通过自己维护“发送”值来完成。 我也注意到resvariables被重新分配

 app.get('/', function (req, res) { var result = {}; // populate object http.get('http://www.google.com/index.html', (httpResponse) => { result.property = httpResponse; if(!res.headersSent){ res.send(result); } }); // if we havent returned within a second, return without data setTimeout(function(){ if(!res.headersSent){ res.send(result); } }, 1000); }); 

检查这个超时callback的例子https://github.com/jakubknejzlik/node-timeout-callback/blob/master/index.js

如果时间到了,或者只是简单地捕捉错误,您可以修改它来执行操作。

你可以尝试使用超时。 例如使用setTimeout()方法:

  • 设置超时处理程序:var timeOutX = setTimeout(function …
  • 将该variables设置为null:timeOutX = NULL(表示超时已被触发)
  • 然后用一个参数执行你的callback函数(error handling):callback({error:'async request timed out'});
  • 您添加超时function的时间,例如3秒

像这样的东西:

 var timeoutX = setTimeout(function() { timeOutX = null; yourCallbackFunction({error:'The async request timed out'}); }, 3000); 
  • 有了这个设置,你可以调用你的asynchronous函数,并且你可以进行超时检查,以确保你的超时处理程序没有被触发。 最后,在运行callback函数之前,必须使用clearTimeout()方法清除该计划的超时处理程序。

像这样的东西:

 yourAsyncFunction(yourArguments, function() { if (timeOutX) { clearTimeout(timeOutX); yourCallbackFunction(); } });