Skip to content

[nodejs] 同步執行迴圈(synchronous loop)實作

Published: at 04:12 AM (2 min read)

在使用 nodejs 時,大家都知道很多函式都是使用 callback 的方式來撰寫,但有時候我們可能希望同步的執行程式碼。

舉個例子:

比如我們要將多筆資料,一筆一筆的塞進去 mongoDB

[javascript] for(var i=0; i<docs.length; i++) db.collection(‘data’).insertOne({‘name’: docs[i].name, ‘id’: docs[i].id}, (err, result) => {}); [/javascript]

藉由上面這段程式碼,我們會非同步的執行資料一筆一筆塞入 mongoDB 的動作,但這樣非同步的塞資料,可能會導致機器負載過高,甚至 mongoDB 無法負荷等等。

所以,有時候我們會希望是一筆一筆資料同步的塞進去,而不是非同步執行。

這時候,我們就可以使用 callback 的寫法來時做這個迴圈,如下程式碼:

[javascript][/javascript] var i=0; var max=docs.length; (function insertData() { db.collection(‘data’).insertOne({…}, (err, result) => { i++; if(i<max) insertData(); }); }()); [javascript][/javascript]

這樣就可以保證一筆塞完成功後,才會再塞下一筆。上面程式碼有用到 IIFE(立即執行函式)