Я по-прежнему новичок в написании кода для Node.js (исходя из PHP) и иногда пытаюсь понять, работают ли операции async корректно, особенно когда есть несколько вложенных вызовов базы данных/асинхронных операций ,Вложенные операции async в node.js
Например, в этом фрагменте кода (который использует mongo) будет ли программа заканчиваться только после того, как deleted
был установлен в любых требуемых учетных записях? (См todo
1, 2 и 3):
// array of account emails to be compared against the accounts already in the database (using `email`)
var emailsArray;
accountsDatabase.find({}, {})
.then(function (accountsInDB) {
return q.all(_.map(accountsInDB, function (dbAccount) {
// compare account's email in db with emails array in memory using .email
if ((emailsArray.indexOf(dbAccount.email) > -1) === false) {
// todo 1. should there be another 'then' here or is 'return' ok in order for it to work asynchronously?
return accountsInDB.updateById(dbAccount._id, {$set: {deleted: true}});
} else {
// todo 2. is this return needed?
return;
}
}));
})
.then(function() {
// TODO 3. WILL THE PROGRAM POTENTIALLY REACH HERE BEFORE `deleted` HAS BEEN SET ON THE REQUIRED ACCOUNTS?
callback(); // all of the above has finished
})
.catch(function (err) {
callback(err); // failed
});
Вместо того, чтобы принимать параметр «callback», вы просто должны «вернуть» обещание, которое вы произвели. – Bergi