Mongooseを使ってMongoDBで何らかの操作をしています。ユーザーが作成したすべてのタスクを調べて、isPerforming
の値をfalse
に設定して保存します。 ドキュメントでは、mongooseクエリ(.exec()
機能付き)が有望です。多くのタスクがありますので、それらを配列にプッシュして、Q.all([...])
を使用して並列保存操作を行うと思います。問題は私が.push()
をしようとするときです。私のコードは、最初に.push()
操作の後に停止します。 他の方法がありますか?Mongooseクエリ(約束)を配列に追加して並列処理を行う
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
[明示的な約束作成反パターン](http://stackoverflow.com/quエスポジション/ 23803743 /明白な約束 - 建設 - 反パターンと方法 - 私はそれを回避する)。あるタイプの約束(マングース)を別のもの(q)に変換する必要がある場合は、「Promise.resolve(otherPromise)」または「Q(otherPromise)」を使用します。 –