2011-09-25 106 views
0

函数数组,[fn1,fn2,...],每个函数通过回调“返回”,传递一个可选错误。如果通过回调返回错误,则不应调用数组中的后续函数。,使用forEach调用每个函数的回调函数?

// 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

如果我正确理解您的问题,并且您可以使用JavaScript 1.6(例如,用于NodeJS),那么您可以使用every函数。

MDN

每每个存在于阵列中元件 执行一次提供回调函数,直到它找到一个其中回调返回假 值。如果找到这样的元素,立即 的每种方法都返回false。否则,如果回调函数为所有 元素返回真值,则每个元素都将返回true。

所以,像这样:

[fn1, fn2, fn3, ...].every(function(fn) { 
    // process 
    if (error) return false; 
    return true; 
}); 

同样,这需要JavaScript 1.6

+0

这看起来好得是真实的。现在测试。 –

+0

对!我无法相信这一点逃脱了我的阅读。谢谢! –