2011-09-25 151 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

對!我無法相信這一點逃脫了我的閱讀。謝謝! –