我是node.js的新手。我正在使用带有node.js的Restify。
我不得不向BigCommerce API发送多个请求。
我实际上为每个响应递增计数器,因此成功和错误情况被保持,只有在没有回复的情况下省略了案例。 为了更安全的一面,我想处理超时问题,即当我没有得到API的一些请求的回复时处理一个案例。
如何处理通过JsonClient(Restify)发送的每个请求的请求超时?
感谢。
答案 0 :(得分:0)
听起来你正在做的是在你收到任何特定请求的响应之前一次发送几个API请求(即,所有并行)并且你正在对你收到的API响应进行引用计数知道你何时完成。
如果这就是你正在做的事情,那么对于那种情况的最基本的超时版本将是这样的(注意:我没有测试过这个):
var apiTimeout;
function apiTimedOut() {
console.log("Yikes!");
apiTimeout = null;
}
function doABunchOfAPICalls() {
// call 'apiTimedOut' after 1 second (unless gotAllAPIResponses called first).
apiTimeout = setTimeout(function() {apiTimedOut();}, 1000);
... do all your API calls here...
}
// called from wherever you are reference counting when all responses received.
function gotAllAPIResponses() {
if (apiTimeout) {
clearTimeout(apiTimeout);
apiTimeout = null;
}
}
=============================================== ===================
也就是说,更好的方法可能是使用“请求”节点模块,当从节点到另一台服务器(例如您的BigCommerce API服务器)执行http请求时,该模块具有内置超时。在此页面上查看“超时”以查看示例:
http://www.sitepoint.com/making-http-requests-in-node-js/
=============================================== ===================
第三,不要自己进行引用计数,而应该查看“promises”,特别是“.all”功能。它允许你做很多事情,只有在一切都完成后才调用回调。例如,这是一个使用Angular引用确切功能(带超时)的问题/答案:
http://stackoverflow.com/questions/19900465/angularjs-q-all-timeout