Je suis développeur nodejs. J'utilise Mongodb avec ORM waterline et async lib pour effectuer une mise à jour des tâches. ci-dessous sont les étapes que je suis suivantesmise à jour des enregistrements de base de données en utilisant waterline orm, mongodb et 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.
Ci-dessus est le code. Le code fonctionne comme prévu mais seul le problème auquel je suis confronté est, Chaque statut de la tâche dans la base de données est mis à jour à 'Testing'. Cela signifie que la dernière requête de mise à jour de base de données met à jour tous les autres statuts.
Une fois la requête de mise à jour, le résultat attendu devrait être
[ { id : 1, name : 'Testing', status : 'Done' }, { id : 2, name : 'Development', status : 'Testing' } ]
Résultat réel est
[ { id : 1, name : 'Testing', status : 'Testing' }, { id : 2, name : 'Development', status : 'Testing' } ]
Je ne reçois pas où je me trompe. Je sais que c'est lié au référencement de l'objet mais je ne peux pas trouver où la réfrence est changée. Avant que la requête ne soit exécutée, la formation de l'objet est ok.
Outils utilisés: - hapijs, waterline -> 0.11, module asynchrone et mongodb.