函数数组[fn1,fn2,...]
,每个函数通过回调“返回”,传递可选错误。如果通过回调返回错误,则不应调用数组中的后续函数。
// one example function
function fn1( callback ) {
<process>
if( error ) callback( errMsg );
else callback();
return;
}
// go through each function until fn returns error through callback
[fn1,fn2,fn3,...].forEach( function(fn){
<how to do this?>
} );
这可以解决other ways,但仍然喜欢使用方法的句法灵巧性。
可以这样做吗?
根据正确答案:
[fn1,fn2,fn3,...].every( function(fn) {
var err;
fn.call( this, function(ferr) { err = ferr; } );
if( err ) {
nonblockAlert( err );
return false;
}
return true;
} );
似乎这有简化的余地。
对我来说,更好的方法来解决这类问题 - 它更平坦,更容易理解逻辑。
答案 0 :(得分:1)
如果我正确理解您的问题并且您可以使用JavaScript 1.6(例如,这是针对NodeJS),那么您可以使用every
函数。
来自MDN:
每个元素执行一次提供的回调函数 出现在数组中,直到找到一个回调返回false的地方 值。如果找到这样的元素,则立即采用每种方法 返回false。否则,如果回调为所有人返回了一个真值 元素,每一个都会回归真实。
所以,比如:
[fn1, fn2, fn3, ...].every(function(fn) {
// process
if (error) return false;
return true;
});
同样,这需要JavaScript 1.6