有一个像这样的异步函数fun(param, callback)
:
fun(param, function(err){
if(err) console.log(err);
doSomething();
});
如何设置运行此功能的时间限制?
例如,我将时间限制设置为等于10秒
如果在10秒内完成,则没有错误
如果它超过10秒,则终止它并显示错误。
答案 0 :(得分:7)
Promise是这种行为的理想选择,你可以拥有类似的东西:
new Promise(function(resolve, reject){
asyncFn(param, function(err, result){
if(error){
return reject(error);
}
return resolve(result)
});
setTimeout(function(){reject('timeout')},10000)
}).then(doSomething);
这是使用基本的ES6 Promise实现。但是如果你想要包含像bluebird这样的东西,你可以找到更强大的工具,比如功能或整个模块的承诺和承诺超时。
http://bluebirdjs.com/docs/api/timeout.html
这在我看来是首选方法。 希望这有帮助
答案 1 :(得分:3)
最简单的方法是在promise中捕获函数。
var Promise = require("bluebird");
var elt = new Promise((resolve, reject) => {
fun(param, (err) => {
if (err) reject(err);
doSomething();
resolve();
});
elt.timeout(1000).then(() => console.log('done'))
.catch(Promise.TimeoutError, (e) => console.log("timed out"))
答案 2 :(得分:1)
我制作了一个模块' intelli-timer'
var timer = require('intelli-timer');
timer.countdown(10000, function(timerCallback){ // time limit is 10 second
do_something_async(err, function(){
timerCallback(); // timerCallback() after finish
});
}, function(err){
if(err) console.log(err); // err is null when the task is completed in time
else console.log('success');
});