仅在异步处理循环完成后呈现视图
问题描述:
我需要某些非常基本的帮助,我似乎无法解决。仅在异步处理循环完成后呈现视图
下面的代码循环输入文件,将行插入数据库并呈现结果视图。
我的问题是视图在所有数据库回调运行之前呈现,所以它总是好像处理了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: '#'
}
});
});
答
你需要每个回调后进行检查,所有的操作都完成
_.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: '#'
}
});
});
});
TNX,这就是我的想法。 – Juvaly