2015-11-05 72 views
0

我需要某些非常基本的幫助,我似乎無法解決。僅在異步處理循環完成後呈現視圖

下面的代碼循環輸入文件,將行插入數據庫並呈現結果視圖。

我的問題是視圖在所有數據庫回調運行之前呈現,所以它總是好像處理了0行。

如何在所有回調被調用後才能渲染?

router.post('/upload', function(req, res) { 
    var good_rows = 0; 
    var bad_rows = 0; 

    ... // get file data 

    _.each(data, function(fileRow) { 
     var dbRow = { 
      data1: fileRow.data1, 
      data2: fileRow.data2 
     }; 

     // insert row to db 
     model.create(dbRow, function(insertedCount) { 
      // this callback is called only after the view was rendered :(
      if (insertedCount == 1) good_rows++; 
      else bad_rows++; 
     }); 
    }); 

    res.render('upload_result', { 
     result: { 
      good_rows: good_rows, 
      bad_rows: bad_rows, 
      log_location: '#' 
     } 
    }); 
}); 

回答

1

你需要每個回調後進行檢查,所有的操作都完成

_.each(data, function(fileRow) { 
     var dbRow = { 
      data1: fileRow.data1, 
      data2: fileRow.data2 
     }; 

     // insert row to db 
     model.create(dbRow, function(insertedCount) { 

      if (insertedCount == 1) good_rows++; 
      else bad_rows++; 
     //on each callback check if completed 
     if(good_rows+bas_rows >= data.length) 
     res.render('upload_result', { 
      result: { 
       good_rows: good_rows, 
       bad_rows: bad_rows, 
       log_location: '#' 
      } 
     }); 
     }); 
    }); 
+0

TNX,這就是我的想法。 – Juvaly

相關問題