我想知道在一個請求中創建/更新多個記錄的最佳做法是什麼。我知道我們可以使用Promise.all()來做到這一點。但是如果我想告訴客戶哪些記錄成功了,哪些失敗了怎麼辦?用Sails.js中的一個請求創建/更新多個記錄
例如,用戶交一樣的東西:
{
departmentId: 1,
students: [
{name: 'John', studentId: 123},
{name: 'Mike', studentId: 124},
]
}
而我目前的解決方案是:
StudentController:
var departmentId = req.param('departmentId');
var postStudents = req.param['students'];
var department;
var failedRecords = [];
Department.findOne()
.then(function (_department) {
department = _department;
var students = [];
while (postStudents.length) {
var student = postStudents.pop();
student.department = departmentId;
var s = Student.create(s)
.then(function(s){return s;})
.catch(function(e){ failedRecords.push(student)}); // A closure problem happens here
students.push(s);
}
return students;
})
.each(function (student) {
department.students.add(student[0].id);
return department.save().catch(function(e){/* log: add to department failed */});
})
.then(function() {
return res.json({msg: "Success"});
})
.catch(function (e) {
return res.json(404, {err: "Fail", records: failedRecords});
});
的代碼是醜,我也忽略代碼解決while循環中的閉包問題。另外,我不知道如何保存到第二個catch中的failedRecords。
sails.js使用藍鳥,而不是Q. – 2015-04-05 20:09:48
嗨圖利奧,這正是我想要的。但是我在Bluebird中找不到這個:-( – Utility 2015-04-07 09:22:29
在bluebird中,'.allSettled'就是所謂的'.settle' – 2015-04-08 03:35:15