使用 'async' 并忽略调用 'callback'
Using 'async' and neglecting to invoke 'callback'
我对 node.js 比较陌生,想知道如何使我的异步代码更可靠。专注于使用 'async' 的代码(由于遗留原因,尚无承诺)。
我的可靠性问题之一是无法调用回调。例如
async.series([
function(callback){
if(..)
console.log("invalid input, try again"); // BUG: NO CALLBACK!
else
callback(null, 'ok');
},
function(callback){
...
}
],
function(err,result){ handleErrorOrResult(err,result);} // MIGHT NOT BE REACHED
);
这段代码可能永远不会完成(永远不会到达 'handleErrorOrResult')而且我什至不知道哪里出了问题。由于这个坑很容易掉进去,不知是否有现成的库解决方案?欢迎任何想法,但一个方向可能是超时:如果整个事情没有在 5 分钟内完成,则调用一些错误处理程序。
非常感谢
为它制作你自己的实现超时的包装器。
var myAsync = {
series: function (callbacks, timeout, done) {
var timeoutId = setTimeout(function () {
done("Maximum Time Exceeded for method!");
}, timeout);
async.series(callbacks, function () {
clearTimeout(timeoutId);
done.apply(this, arguments);
});
}
}
现在您可以像这样使用它:
myAsync.series(functions, functions.length * 500, callback);
我对 node.js 比较陌生,想知道如何使我的异步代码更可靠。专注于使用 'async' 的代码(由于遗留原因,尚无承诺)。
我的可靠性问题之一是无法调用回调。例如
async.series([
function(callback){
if(..)
console.log("invalid input, try again"); // BUG: NO CALLBACK!
else
callback(null, 'ok');
},
function(callback){
...
}
],
function(err,result){ handleErrorOrResult(err,result);} // MIGHT NOT BE REACHED
);
这段代码可能永远不会完成(永远不会到达 'handleErrorOrResult')而且我什至不知道哪里出了问题。由于这个坑很容易掉进去,不知是否有现成的库解决方案?欢迎任何想法,但一个方向可能是超时:如果整个事情没有在 5 分钟内完成,则调用一些错误处理程序。
非常感谢
为它制作你自己的实现超时的包装器。
var myAsync = {
series: function (callbacks, timeout, done) {
var timeoutId = setTimeout(function () {
done("Maximum Time Exceeded for method!");
}, timeout);
async.series(callbacks, function () {
clearTimeout(timeoutId);
done.apply(this, arguments);
});
}
}
现在您可以像这样使用它:
myAsync.series(functions, functions.length * 500, callback);