Получить возвращаемое значение из функции в другом классе - PullRequest
0 голосов
/ 05 февраля 2020

Как я могу получить возвращаемое значение функции в другом классе:

У меня есть класс с некоторым запросом SQLite, и я вызываю этот класс из другого класса, например:

import lotManager from '../components/LotManager';

class LotView extends React.Component {
    async loadLot(id) {
        await console.log('retvalue', lotManager.testIt(id));
    }

    render() {
        this.loadLot(12);
        return (
            // some code
        );
    }
}

И мой SQL класс:

const db = SQLite.openDatabase("db.db");

class LotManager extends Component {
   getLotById = (id) => {
        db.transaction(tx => {
            tx.executeSql("SELECT * FROM LOTS WHERE ID = ?", [id],
                function (tx, results) {
                    // results is the value i actually want to get
                    return results;
                },
                function (tx, error) { console.log("Error SELECT : ", error.message) }
            );
        });
    }
}

const lotManager = new LotManager();
export default lotManager;

Мой вопрос:

Каков наилучший способ получения результата моей функции запроса SQLite для моего класса? Пока я могу взаимодействовать с функцией, но не могу получить возвращаемое значение (я понимаю, почему этот код не работает, он просто объясняет, что я хочу).

Спасибо за любую помощь!

1 Ответ

1 голос
/ 05 февраля 2020

Оберните Promise вокруг вашей db.transaction функции и верните обещание. Разрешить или отклонить всякий раз, когда внутренние обратные вызовы завершены.

class LotManager extends Component {
    getLotById = (id) => new Promise((resolve, reject) => {
        db.transaction(tx => {
            tx.executeSql("SELECT * FROM LOTS WHERE ID = ?", [id],
                function(tx, results) {
                    resolve(results);
                },
                function(tx, error) {
                    reject("Error SELECT : ", error.message);
                }
            );
        });
    });
}

Теперь вы можете получить значения в синтаксисе then и catch.

const lotManager = new LotManager();
lotManager.getLotById(420)
   .then(results => console.log(results))
   .catch(error => console.log(error));

Или сохранить их в переменной с помощью async / await .

(async () => {
  const lotManager = new LotManager();
  const results = await lotManager.getLotById(420);
  console.log(results);
}());
...