Как остановить цепочку обещаний после разрешения?
Я хочу прекратить цепочку обещаний после того, как она разрешится через некоторые условия Ниже приведенный код может быть полезен для понимания того, что я говорю.
function update(id, data) {
return new Promise((resolve, reject) => {
let conn;
pool.get()
.then((db) => {
conn = db;
if(Object.keys(data).length === 0) {
return resolve({ updated: 0 });
}
else {
return generateHash(data.password);
}
})
.then((hash) => {
conn.query("UPDATE ... ", (err, queryResult) => {
if(err) {
throw err;
}
resolve({ updated: queryResult.affectedRows });
});
})
.catch((err) => { ... })
});
}
Обратите внимание, что pool.get () - это обернутый в обещание API для получения пула соединений из модуля MySQL, который я создал.
Я пытаюсь обновить пользовательские данные. И для сохранения ресурсов сервера я избегал обновлений, если нет данных для обновления (Object.keys (data) .length === 0).
Когда я попробовал этот код, то во-вторых (обновление БД) всегда происходит, даже если нет данных для обновления!
Я читаюэта почта, но это не сработало. Почему цепочка обещаний не была остановлена, когда я вызвал «return resol ();»? И как мне это правильно остановить? Мне действительно нравится использовать Promises, но иногда такие вещи сводят меня с ума. Будет очень полезно помочь мне решить эту проблему. Спасибо!
Постскриптум В любом случае я использую узел v6.2.2.