Node.js nodejs:如果方法挂起,则强制执行回调
我的第三方库中的异步nodejs方法花费的时间太长。我想为这个调用设置一个超时限制,如果它没有在该超时内返回,我想用默认(空)值进行回调 现行代码Node.js nodejs:如果方法挂起,则强制执行回调,node.js,callback,Node.js,Callback,我的第三方库中的异步nodejs方法花费的时间太长。我想为这个调用设置一个超时限制,如果它没有在该超时内返回,我想用默认(空)值进行回调 现行代码 wrapperfunct(data, function(value, err) { //do everything with value or err }) wrapperfunc(data, callback) { thirdpartylib.getData(input, callback) } 我注意到getData
wrapperfunct(data, function(value, err) {
//do everything with value or err
})
wrapperfunc(data, callback) {
thirdpartylib.getData(input, callback)
}
我注意到getData有时会挂起,这会阻止回调的发生。如果getData在指定的时间内没有调用回调方法,则我需要一种行为,即使用默认值调用回调,例如(null,null)。您可以这样设置自己的超时:
wrapperfunc(obj, timeout, data, callback) {
var done = false;
var timer = setTimeout(function() {
done = true;
// callback with both values null to signify a timeout
callback(null, null);
}, timeout);
obj.thirdpartylib.getData(input, function(err, data) {
if (!done) {
clearTimeout(timer);
done = true;
callback(err, data);
}
})
}
注意:您建议的函数中的
this
的值可能不正确,因此我用obj
代替。您要么必须传入该值,要么必须使用范围内的某个变量。谢谢,我是否也需要对setTimeout()中的done进行类似的检查,比如setTimeout(function(){if(!done){done=true,callback(null,null);},timeout);:)@jsfriend00即使在第三方库回调及时完成时,setTimeout
内的回调也不会被调用吗?@blazesahlzen-查看clearTimeout,这样在这种情况下就不会触发超时。哦,是的,我似乎错过了这一点。@konquestor-查看clearTimeout()
在第三方呼叫成功时停止计时器启动。因此,除非第三方呼叫尚未完成,否则计时器永远无法启动。