Я пытаюсь написать функцию в nodejs, которая считывает информацию о пользователях из файла json (я знаю, что это небезопасно, просто упражнение), регистрирует, верны ли данные, и отправляет ответ. Я написал эту функцию asyn c:
async function getUser(sUsername) {
fs.readFile('db/users.json', (err, data) => {
if (err) {
console.log(`An error has occured in getUser function`)
}
let users = JSON.parse(data)
userNamesFromFile = Object.keys(users);
console.log(`Data is: ${data}`)
console.log(`Users after parsing are: ${userNamesFromFile}\n`)
for (currUser in userNamesFromFile) {
`Currently checking comparing to user: ${currUser}\n`
if (currUser === sUsername) {
var oUser = new User(currUser, users[currUser].password);
return oUser;
}
}
})
}
И я называю это здесь:
getUser(oBody.username.toLowerCase()).then(oFoundUser => {
console.log(`Finished the async function, found user ${oFoundUser}`)
if (oFoundUser) {
if (oBody.password.toString() === oFoundUser.password.toString()) {
console.log("Login successful")
res.statusCode = 200
req.session.username = oFoundUser.username;
}
else {
console.log("Wrong password")
res.statusCode = 401;
}
}
else {
res.statusCode = 401
console.log("No user with such a name exists")
}
res.send();
})
Это журнал, который я получаю с сервера при вводе правильных данных пользователя :
Finished the async function, found user undefined
No user with such a name exists
POST /login 401 7.822 ms - -
Data is: {
"testuser1": {
"password": 12345
},
"testuser2": {
"password": 6789
}
}
Users after parsing are: testuser1, testuser2
Похоже, он говорит, что функция asyn c запускается и только тогда записывает информацию, которую я регистрирую, с помощью функции asyn c. Он даже не попадает в циклы, сравнивая пользователей с тем, что я только что получил из моего json файла. Я помещаю то, что я хочу сделать с возвращаемым значением функции asyn c в .then. Разве он не должен работать в том порядке, в котором я его ожидаю?
Спасибо,
Бен