2014-02-06 69 views
0

有沒有一種方法可以在循環中調用異步方法,把所有結果放在一個數組&中,最後返回結果。Javascript,NodeJS:在循環和返回結果中調用異步方法

的什麼我想要做的僞代碼:

methodThatRunsAsync(callback){ 
    once completes, invoke callback; 
} 

anotherMethod(){
VAR的結果= [];
爲(I = 1; I = 10;我++){

methodThatRunsAsync(function(resp){ 
    result.push(resp); 
}); 

return result; } 

}

但結果的值始終是默認值。我如何捕獲同步塊中的異步塊的結果並將其返回給調用者。

展望Promise框架,但發現它有點難以讓我的頭。如果任何人都可以請幫我理解如何實現這一點,僞代碼也將是偉大的。

+1

https://github.com/caolan/async - 擁有您需要的一切。 – techfoobar

+0

謝謝你...!試圖不使用庫,任何簡單的方法,我可以爲此編寫自己的模塊。什麼是設計模式。 –

回答

3

不,您不能返回結果,因爲調用是異步的。使用該函數的回調函數,並在添加最後一個結果時調用它:

function anotherMethod (callback) { 
    var result = []; 
    var count = 10; 
    for(i = 0; i < count; i++) { 
    methodThatRunsAsync(function(resp){ 
     result.push(resp); 
     if (result.length == count) { 
     callback(result); 
     } 
    }); 
    } 
} 

請注意,我更改了循環。你有的循環根本不會做任何迭代。

+0

哇..這真的很簡單,謝謝一噸。但是使用這種方法有沒有什麼缺點。 –

+0

@ErrolDsilva:一個限制是它依賴於所有導致回調的調用。如果異步方法可能會失敗或需要很長時間,則可能需要添加超時並使用獲得的結果調用回調。 – Guffa