JS, как изменить глобальную переменную в данной ситуации
function (email) {
var ourUser
// Подключение к дб
const connection = mysql.createConnection({
user: "root",
database: "users",
port: "3309",
password: "root"
})
// Запрос в бд
connection.query(`SELECT * FROM users WHERE login= ?`, email, function (err, result, field) {
// Структура успешно создаётся, данные заносятся
ourUser = JSON.parse(JSON.stringify(result[0]))
// Закрываем подключение
connection.end()
})
// В итоге получаем undefind
return ourUser
}
Хочу перенести данные (логин, пароль, id) из бд в переменную, а позже вернуть её по результату вычисления функции. Как можно это реализовать(нужно по итогам вычисления функции, вернуть эту структуру наружу фукнции ourUser = JSON.parse(JSON.stringify(result[0])))?
Ответы (1 шт):
Автор решения: Alexander Lonberg
→ Ссылка
Использовать асинхронные функции. Можно конечно и на callback-ах, но с ними легче запутаться. return-ом такое возвратить нельзя.
async function select(email) {
// ...
return new Promise((s, e) => {
connection.query(`SELECT * FROM users WHERE login= ?`, email, function (err, result, field) {
connection.end()
// Эта строка эквивалентна return или throw Error
err ? e(err) : s(result)
})
})
}
void (async () => {
let result
try {
result = await select(email)
} catch (e) {
console.error(e)
return
}
// ... Что то делаем дальше
})()