【发布时间】:2017-03-30 22:13:31
【问题描述】:
我正在使用 mongoose 在 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。如果您必须将一种类型的 Promise (mongoose) 转换为另一种 (q),请使用
Promise.resolve(otherPromise)或Q(otherPromise)。
标签: javascript node.js mongoose promise