2016-03-12 41 views
0

我使用的節點異步LIB - https://github.com/caolan/async#forEach,並希望通過陣列(arrayOne)進行迭代,結果推至另一個(productList的),並將該數組傳遞給最終函數。但是,打印結果是一個空數組。Node.js的使用async.forEach - 如何列表傳遞給最終功能

function Async(callback) { 
    var productList = []; 
    async.forEach(
     arrayOne, 
     function(item, callback){ 
      getClientsNb({id:item["row"][0]},function (result) { 
       productList.push(result) 
      }); 
      callback(); 
     }, 
     function(err) { 
      console.log(productList); 
     }  
    ); 
} 

「getCLientsNb」函數是對Neo4j數據庫的調用。

我想知道爲什麼結果是一個空數組。由於我在node.js的初學者,請在你的答案:)

+0

它是否在'getClientsNb'回調內迭代?你有沒有試着把'console.log(result)'放在'productList.push(result)'附近? – llamerr

回答

1

很清楚你的問題出在哪裏你把你的回調。

function(item, callback)   
{ getClientsNb({id:item["row"][0]},function 
    (result) { productList.push(result) }); 
    callback(); } 

外函數在執行getClientsNb()的回調之前返回,所以你永遠不會建立你的列表。你需要移動的回調函數內部:

function(item, callback){ getClientsNb({id:item["row"][0]}, 
    function (result) { 
      productList.push(result) 
      callback()}); 
} 

如果使用async.map代替的forEach,那麼你就不會需要創建一個productList的。只需將第二個參數的結果傳遞給回調函數,並將其作爲第二個參數傳遞給最終函數。

+0

非常感謝! – bmaz

相關問題