#javascript #node.js #mongoose
#javascript #node.js #мангуст
Вопрос:
//get user email
let userEmail = '';
User.findOne({ _id: userId })
.then(user => {
if (!user) {
return res.status(401).json({
message: "Could not find user in database. Make sure you have an account and try again"
});
}
userEmail = user.email;
console.log('This is the email01' userEmail);
}).catch(error => {
return res.status(500).json({
message: "Something went wrong with the server. Please try again."
});
});
console.log('This is the email' userEmail);
По какой-то причине я могу утешить.регистрируйте электронную почту при вызове метода User.findOne … однако, когда я пытаюсь получить к ней доступ вне функции, она больше не существует. Пожалуйста, помогите.
Комментарии:
1. Привет, gallowaystorm, JavaScript не будет ждать вашего
User.findOne...
продолжения, и именно поэтому userEmail пуст. Прочитайте о javascript.info/async как работает JavaScript medium.com/jspoint/… это хорошая статья обо всем2. Асинхронный,. В основном findOne произойдет в будущем, журнал консоли появится в следующей строке..
Ответ №1:
Дело не в том, что вы не можете получить к ней доступ, а в том, что она еще не установлена. User.findOne
Вызов возвращает обещание (именно поэтому вы можете вызвать .then
его). При вызове findOne
код продолжает свой путь выполнения, который затем вызовет ваш console.log. Однако логика в then
предложении может завершиться, а может и не завершиться (скорее всего, нет, поскольку при вызове базы данных будет некоторая задержка).