私はnodejsの開発者です。私は、更新タスクを実行するために、水線ORMと非同期のlibでMongodbを使用しています。以下は私の次のステップです水線orm、mongodbおよびasync.parallelを使用してデータベースレコードを更新する
function update(task, payload, next) {
const self = this;
async.auto({
createUpdateObj : (callback) => {
let update = { status : payload.status };
return callback(null, update);
},
updateTask : ['createUpdate', (result, callback) => {
self.waterline.collections.task.update(task.id, result.creatUpdateObj, callback);
}]
}, (err, results) => {
if(err) return next(err);
return next(null, { message : "Task updated successfully." });
});
}
let dbTasks = [ { id : 1, name : 'Testing', status : 'To Do' }, { id : 2, name : 'Development', status : 'In Progress' } ]
let asyncTasks = [];
let payload = {
tasks = [{ id : 1, status : 'Done'}, {id : 2, status : 'Testing'}]
};
dbTasks.forEach((task, index) => {
asyncTasks.push(function(cb) {
update.bind(hapiServerObject)(task, payload.tasks[index], cb)
});
});
async.parallel(asyncTasks, console.log); // It prints the response message 2 times.
上記はコードです。コードは期待どおりに動作しますが、私が直面している問題のみです。データベースのすべてのタスクステータスが「テスト」に更新されます。つまり、最後のデータベース更新クエリは他のすべてのステータスを更新します。
更新クエリの後、期待される結果は
[ { id : 1, name : 'Testing', status : 'Done' }, { id : 2, name : 'Development', status : 'Testing' } ]
実際の結果は、私が間違っているつもりですどこ私は得ていないのです
[ { id : 1, name : 'Testing', status : 'Testing' }, { id : 2, name : 'Development', status : 'Testing' } ]
であるべきです。私はオブジェクトの参照に関連することを知っているが、私はrefrenceが変更される場所を見つけることができません。クエリが実行される前にオブジェクトの作成はOKです。
使用ツール: - hapijs、waterline - > 0.11、asyncモジュールおよびmongodb。