callback 與 foreach 的執行順序與次數問題

為了要在跑完迴圈再做某些事, 我們會使用forEach, 但是在搭配callback時, 像這樣

這樣的想法是希望doSomething函數處理到items每一個元素, 再用console.log印出來。

然而, 因為doSomething的執行時間不一樣, forEach丟出去給doSomething接, 不表示doSomething會循序丟回來, 所以最後印出來的時候, 會發現items可能有些元素會沒有處理到。

有的人可能會想到, 那我就在forEach處理到最後一個元素再處理好了, 像這樣

但這是沒意義的, 理由跟上述的一樣。

我們應該去計算的, 是callback函數處理的數量有沒有正確, 所以是像這樣

每一人固doSomething在處理後, 執行它的callback時, 會去計算count, 看看是不是等於3, 如果obj1很不巧的最後才跑完, 那doSomething在處理obj1時, 就會得到count=3, 此時即可確保每個doSomething的callback都跑完了.

 

解法來源: 劉朝中

 

 

 

Leave a Reply

你的電子郵件位址並不會被公開。 必要欄位標記為 *