Promise.每个在蓝鸟都有某种所有操作完成的回调吗?
Does Promise.each in Bluebird has some kind of all operations finished callback?
我正在使用Bluebird来处理承诺,但是我很难知道所有迭代何时完成,因此我可以将结果提交回客户端。
到目前为止,这是我的代码:
Student.find({ status: 'student' })
.populate('student')
.exec(function (err, students) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
}
Promise.each(students, function (student) {
// console.log(student.id);
return WorksnapsTimeEntry.find({ "student": student.id })
.then(function (doc) {
var totalMinutes = 0;
var totalAvgLevelActivity = 0;
var counter = 0;
_.forEach(doc, function (item) {
if (item.timeEntries.duration_in_minutes) {
totalMinutes = totalMinutes + parseFloat(item.timeEntries.duration_in_minutes[0]);
}
if (item.timeEntries.activity_level) {
totalAvgLevelActivity = totalAvgLevelActivity + parseFloat(item.timeEntries.activity_level[0]);
counter++;
}
});
var obj = {};
obj.studentId = student.id;
obj.firstName = student.firstName;
obj.lastName = student.lastName;
obj.municipality = student.municipality;
obj.totalMinutes = totalMinutes;
obj.totalAvgLevelActivity = totalAvgLevelActivity / counter;
arrayReports.push(obj);
})
});
});
setTimeout(function () {
res.json(arrayReports);
console.log('finished.');
}, 5000);
从上面的代码中可以看出,我将超时设置为 5 秒,直到上述所有操作完成,然后将结果发送到客户端。
我正在寻找一些简单的东西,我的代码不会改变太多。
有人对此有任何想法吗?
根据这里的文档,Promise.each 返回一个承诺。
Promise.each(
Iterable<any>|Promise<Iterable<any>> input,
function(any item, int index, int length) iterator
) -> Promise
所以,我想你可以这样做:
Promise.each(students, function (student) {
....
}).then(function(){
//all done
res.json(arrayReports);
console.log('finished.');
});
相关文章:
- Flux+React.js-回调操作是好是坏
- 在执行所有回调函数后执行操作
- Promise.每个在蓝鸟都有某种所有操作完成的回调吗?
- 地理定位onSuccess回调中的操作
- 我如何找到“;操作's”;代码中的位置'回调函数不支持此操作'
- 如何正确地将异步回调与react中的表单操作连接起来
- 处理Ember中操作中的事件绑定和回调
- 转置数组时收到“回调函数不支持此操作”错误
- 来自 jQuery 的回调未到达控制器/操作
- 使用 Async 在 Node JS 中序列化具有多层回调的操作
- 如何在 $ 中执行异步操作.延迟,然后失败过滤回调并传递回成功链
- 回调中的 DOM 操作
- 在执行某些 ajax 操作时,此匿名回调函数何时运行
- 如何看待 Node.js 中的异步回调操作
- 我们怎么能知道所有的异步操作,所有的回调都完成了,并等待它们
- Node.js回调操作检查
- 使用Ajax的json回调元素来选中已操作的复选框
- 反流操作执行后触发通知/回调
- 回调中的异步操作
- 淘汰dom操作后回调jquery函数