2015-12-28 56 views
1

我正在寫一個簡單的服務器在NodeJS中,而不使用除數據庫連接之外的任何框架。我有這個代碼來填充數據庫:這是一個控制NodeJS異步的好方法嗎?

module.exports = function(callback) { 
    var model = require('./model'); 
    var seedData = [ 
     // Some seed objects 
    ]; 
    var count = 0; 
    for(var i = 0; i < seedData.length; i++) { 
     model.Complaint.createComplaint(seedData[i], function(err, id) { 
      count++; 
      if (count === seedData.length) { 
       callback(); 
      } 
     }); 
    } 
}; 

在這裏我檢查每個回調,如果其他回調已被執行。如果countseedData數組的長度,我稱主回調。管理調用異步方法的循環是否是一種好方法?

+0

這是一個很好的方法來做到這一點([示例](http://stackoverflow.com/a/30683157/5388620)),但你應該看看承諾。你寫了'model.Complaint.createComplaint()'? – Shanoor

+0

如果'seedData.length'很大,那麼你的數據庫可能會插入數據,因爲它們是同時啓動的。另外,如果一個函數調用失敗,其他函數仍然會被執行而不是提前提供。 – robertklep

回答

0

正如ShanShan在評論中已經提到的那樣,Promises在需要處理大量異步函數時非常強大。如果您只是想簡化您當前的腳本,Async.js可能對您有用。它可以讓你重寫你的循環爲:

async.each(seedData, model.Complaint.createComplaint, callback); 

並提供了大量的,給你過流更多的控制(如運行的功能無論是在串聯或並聯)等方法。

相關問題