nodejs:如果方法挂起,则强制执行回调执行

时间:2016-03-01 02:02:55

标签: node.js callback

我遇到的情况是我的第三方库中的asynchronus nodejs方法耗时太长。我想为这个调用设置一个超时限制,如果它没有在该超时内返回,我希望在默认(空)值的情况下进行回调。

当前代码

wrapperfunct(data, function(value, err) {
  //do everything with value or err
})


wrapperfunc(data, callback) {
      thirdpartylib.getData(input, callback)
    }

我注意到getData有时会挂起,这会阻止回调的发生。我想要一个行为,如果getData没有在指定的时间内调用回调方法,我用默认值调用回调,比如说(null,null)。

1 个答案:

答案 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。您将要么必须传递该值,要么必须使用范围内的变量。