我正在MongoDB中使用猫鼬做一些操作。我想搜索用户创建的所有任务,然后将值isPerforming
设置为false
并保存。 文档说,猫鼬查询(与.exec()
函数)是承诺。有很多任务,所以我想推动他们阵列和使用Q.all([...])
并行保存操作。问题是当我试图做.push()
。我的代码在第一次.push()
操作后停止。 有没有其他方法可以做到这一点?将猫鼬查询(承诺)添加到数组并执行并行操作
function stopUserTasks(userid) {
var deferred = Q.defer();
var query = Task.find({'_creator': userid}).exec();
query.then(function(data, err) {
console.log('found: ');
console.log(data);
if (err) {
deferred.reject(err);
}
return data;
})
.then(function(data, err) {
var len = data.length;
var saveTasksPromises = [];
for(var i = len; i--;) {
console.log(data[i]._id);
saveTasksPromises.push(Task.save({'_id': data[i]._id, 'isPerforming': false}).exec());
}
return saveTasksPromises;
})
.then(function(data, err) {
console.log(data);
deferred.resolve();
});
return deferred.promise;
}// #stopUserTasks
请不要使用[explicit promise creation antipattern](http://stackoverflow.com/quale estions/23803743 /什么,是最明确的,承诺建设,反模式和如何-DO-I-避免-IT)。如果您必须将一种类型的承诺(猫鼬)转换为另一种(q),请使用'Promise.resolve(otherPromise)'或'Q(otherPromise)'。 –