Node.js 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

我的第三方库中的异步nodejs方法花费的时间太长。我想为这个调用设置一个超时限制,如果它没有在该超时内返回,我想用默认(空)值进行回调

现行代码

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()
在第三方呼叫成功时停止计时器启动。因此,除非第三方呼叫尚未完成,否则计时器永远无法启动。