Мой вопрос прост: когда я запускаю следующий код и проверяю БД, я обнаруживаю, что пользователь успешно удален, это означает, что User.findOneAndDelete
выполняется, обещание выполнено, и я ожидаю увидеть { success: 'user_deleted' }
в ответ; однако я получаю { error: 'user_not_found' }
, что должно происходить ТОЛЬКО в том случае, если User не существует, что здесь не так, потому что код внутри блока IF выполняется согласно моим наблюдениям в БД.
User.exists({ username}).then(exists => {
if (exists) {
User.findOneAndDelete({ username }).then(() => {
res.json({ success: 'user_deleted' });
return;
}
).catch(err => {
res.json({ error: 'user_delete_fail' });
return;
})
};
res.json({ error: 'user_not_found' })
return;
});
Теперь, чтобы решить эту проблему, я попытался добавить оператор else
вместо неявного способа, которым я делал это раньше, и он работал, как ожидалось, и я получил в ответе `{success: 'user_deleted'}.
User.exists({ username}).then(exists => {
if (exists) {
User.findOneAndDelete({ username }).then(() => {
res.json({ success: 'user_deleted' });
return;
}
).catch(err => {
res.json({ error: 'user_delete_fail' });
return;
})
} else {
res.json({ error: 'user_not_found' })
return;
};
});
Мой вопрос: почему такое поведение происходит? Почему выполнение уже перескакивает в конец функции? И почему, когда он переходит в нижнюю часть функции и отвечает, как происходит удаление и пользователь удаляется в БД, я здесь совершенно запутался.
EDIT: он также ведет себя так, как ожидалось, когда я конвертирую родительскую функцию для функции async
и используйте await для операции с базой данных.