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

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

舉個例子:

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

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

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

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

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

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

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

Leave a Reply