我遇到的情况是我的第三方库中的asynchronus nodejs方法耗时太长。我想为这个调用设置一个超时限制,如果它没有在该超时内返回,我希望在默认(空)值的情况下进行回调。
当前代码
wrapperfunct(data, function(value, err) {
//do everything with value or err
})
wrapperfunc(data, callback) {
thirdpartylib.getData(input, callback)
}
我注意到getData有时会挂起,这会阻止回调的发生。我想要一个行为,如果getData没有在指定的时间内调用回调方法,我用默认值调用回调,比如说(null,null)。
答案 0 :(得分:3)
您可以像这样制作自己的超时:
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
。您将要么必须传递该值,要么必须使用范围内的变量。