@thevalakas

Nodejs sqlite3 почему не записывается результат запроса в переменную?

'use strict';

const sqlite = require('sqlite3').verbose();

const db = new sqlite.Database('database.db');

module.exports.register = function (from) {
    db.all("SELECT * FROM users WHERE tele_id = ?", [from.id], function (err, rows) {
        if (rows.length < 1) {

            if (from.last_name === undefined) {
                from.last_name = null;
            }

            if (from.username === undefined) {
                from.username = null;
            }

            db.run("INSERT INTO users (tele_id, first_name, last_name, username) VALUES (?, ?, ?, ?)", [from.id, from.first_name, from.last_name, from.username]);
        }
    });
};

module.exports.balance = function (tele_id) {
    let balance;

    db.get("SELECT * FROM users WHERE tele_id = ?", [tele_id], function (err, result) {
        console.log(result.balance); // 100
        balance = result.balance; // undefined
    });

    return balance;
};

Функция balance возвращает undefined, а должна возвращать баланс. console.log из callback'a возвращает 100 а не undefined.
  • Вопрос задан
  • 905 просмотров
Решения вопроса 1
viaskit
@viaskit
Попробую и я внести свои пять копеек
module.exports.balance = function (tele_id) {
    return new Promise((resolve, reject) => {
        db.get("SELECT * FROM users WHERE tele_id = ?", [tele_id], (err, result) => {
            if (err) {
                reject(err);
            }
            resolve(result)
        });
    });
}
// Где то в другом месте
balance(123).then((row) => {
    // Обработка записи из таблицы
}).catch((err) => {
    // Что то пошло не так :(
})

Второй вариант
module.exports.balance = function (tele_id, callback) {
    db.get("SELECT * FROM users WHERE tele_id = ?", [tele_id], callback);
}

// Где то в другом месте
balance(123, function(err, row) {
   if (err) {
      throw Error(err);
   }
   console.log(row);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
потомучто js это асинхрон
пример
ваша функция вызвалсь и код пошел дальше выполнятся а рузльтат еще не получен.

ршается это все через collback лапшу, промисы или любые другие либы которыt решают эту проблему await напрмиер
в es6 можно решить это через оератор await
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽