2016-05-13 109 views
0

的立即執行我使用節點JS異步模塊,我想運行一堆並聯功能。如果其中一個函數返回錯誤,我不希望主回調立即執行。我希望主回調在任何情況下都能被最後執行,並且我希望得到一個返回錯誤的項目數組,以及一個OK的項目數組。這是否可能沒有額外的邏輯?節點JS異步 - 防止主回調

回答

0

而是在該函數的回調返回錯誤的,只是把錯誤的錯誤陣列,按下OK項目的確定陣列,並呼籲用null作爲第一個參數(回調(空))回調所有功能。事情是這樣的:

var okArray = []; 
var errorArray = []; 

async.parallel([ 
    function(callback) { 
     // do something 
     if (error) { 
      errorArray.push(errorItem); 
     } else { 
      okArray.push(okItem); 
     } 
     callback(null); 
    }, 
    function(callback) { 
     // do something 
     if (error) { 
      errorArray.push(errorItem); 
     } else { 
      okArray.push(okItem); 
     } 
     callback(null); 
    } 
], function(err) { 
    console.log(okArray); 
    console.log(errorArray); 
}); 

如果你不介意在並行調用都成功/失敗的功能只是1陣列,並平行於數組中列出的順序返回結果的數組,每個功能。例如:

async.parallel([ 
    function(callback) { 
     // do something 
     if (error) { 
      return callback(null, errorItem); 
     } 
     callback(null, okItem); 
    }, 
    function(callback) { 
     // do something 
     if (error) { 
      return callback(null, errorItem); 
     } 
     callback(null, okItem); 
    } 
], function(err, results) { 
    console.log(results); // results[0] = what 1st function returns 
          // results[1] = what 2nd function returns 
}); 
0

嘗試尋找Javascript Promise對象。

讓所有您的並行函數返回一個承諾的對象,他們堅持一切到一個數組。 然後,做Promise.all([promises])。然後(回調); 除非你的函數拋出一個異常,否則你只能在所有函數執行完畢後才能調用回調函數。

+0

謝謝,但我想堅持異步。 –