在javascript中,使用forEach使用回调调用数组中的每个函数?

时间:2011-09-25 05:40:14

标签: javascript recursion

函数数组[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;
} );

似乎这有简化的余地。

对我来说,更好的方法来解决这类问题 - 它更平坦,更容易理解逻辑。

1 个答案:

答案 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