我的问题很简单,当我运行以下代码并检查数据库时,我发现用户已成功删除,这意味着User.findOneAndDelete已执行,承诺已履行,我希望{ success: 'user_deleted' }在响应中看到;但是,我得到{ error: 'user_not_found' }的只有当用户不存在时才应该发生这种情况,这里不是这种情况,因为 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;
};
});
我的问题是:为什么会发生这种行为?为什么执行已经跳到函数的底部?以及为什么当它走到函数底部并响应时,删除是如何发生的,用户在数据库中被删除,我在这里很困惑。
编辑:当我将父函数转换为async函数并在 DB 操作上使用 await 时,它的行为也符合预期。