Node.js Функция "UserLogged", возвращающая "undefined". Зачем?
Когда я добираюсь до конца кода ниже, он всегда возвращает "неопределенный", и я не знаю почему!
function UserLogged (session) {
if (session === null) {
var err = new Error('Not logged in');
err.status = 400;
return {user : null, err : err};
}
User.findById(session.userId)
.exec(function (error, user) {
if (error) {
return {user : null, err : error};
}
else {
if (user === null) {
var err = new Error('Not authorized!');
err.status = 400;
return {user : null, err : err};
}
else {
console.log("User found and ok!");
return {user : user, err : null};
}
}
});
}
Это делает журнал "Пользователь найден и хорошо!" на консоли, но все равно возвращает "неопределенный"
1 ответ
Похоже, вы пытаетесь вернуть что-то из функции обратного вызова. Javascript в основном работает асинхронно для операций ввода-вывода. Функция, объявленная внутри .exec()
здесь функция обратного вызова
Я нашел эту ссылку полезной для понимания асинхронного кодирования. https://blog.risingstack.com/node-hero-async-programming-in-node-js/
Вы можете изменить свой код так, чтобы он работал
function UserLogged (session, callback) {
if (session === null) {
var err = new Error('Not logged in');
err.status = 400;
return callback(err);
}
User.findById(session.userId)
.exec(function (error, user) {
if (error) {
return callback(error);
}
else {
if (user === null) {
var err = new Error('Not authorized!');
err.status = 400;
return callback(err);
} else {
console.log("User found and ok!");
callback(null, user);
}
}
});
}
Аргумент обратного вызова должен быть функцией, подобной этой
UserLogged(session, function(err, user) {
console.log(err);
console.log(user);
})
Передача "err" в качестве первого аргумента для функции обратного вызова является стандартом nodejs.
Надеюсь, это помогло вам:D