我是node.js的新手。我在node.js中使用Restify。
我不得不向BigCommerce API发送几个请求。
实际上,我会为每个响应增加计数器,所以成功和错误的情况都会被混淆,唯一被遗漏的情况是当我没有得到回复时。为了安全起见,我想处理超时问题,即当我没有得到API对一些请求的回复时,处理一个案例。
如何处理通过JsonClient(Restify)发送的每个请求的请求超时?
谢谢。
听起来,您所做的是在获得对任何特定请求的响应之前(即,所有并行请求)同时发送多个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/
=================================================
第三,与其自己计算引用,不如研究"promise",特别是".all"功能。它允许你做很多事情,并且只在一切完成后才调用回调。例如,这里有一个问题/答案引用了使用Angular的确切功能(带超时):
http://stackoverflow.com/questions/19900465/angularjs-q-all-timeout