@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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы