Возврат данных в компонент из класса помощника БД - PullRequest
0 голосов
/ 12 ноября 2018

Я использую sqlite, и я создал вспомогательный класс БД. Я не получаю данные из этого класса внутри компонента, но если я утешаюсь внутри db helper, он работает правильно, но не в компоненте. Я даю свой код: -

Cartdb.js. (Хелпер класс)

var SQLite = require('react-native-sqlite-storage')
db = SQLite.openDatabase('predefine.db', "1.0", "Predefine", -1);
class CartDB {
    constructor(){

    }
    totalItems = 0;
    checkCountOfProduct(){
        query = "SELECT SUM(count) AS product_count FROM Predefinedcart";
       db.transaction((tx) => {
            tx.executeSql(query, [], (tx, results) => {
                console.log(results.rows.item(0).product_count)
                this.totalItems = results.rows.item(0).product_count;
                return this.totalItems;
            }, function (tx, error) {
                console.log('SELECT error: ' + error.message);
            });
        })
    }
}

export default new CartDB();

Код в компоненте:

import CartDB from '../../../library/CartDB';
class PredefinedLayout extends React.Component{
 constructor(props){
   super(props);
   console.log(CartDB.checkCountOfProduct());
 }


}

Как я могу получить данные здесь? Заранее спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

Это асинхронная операция, что означает обещание. Лучшим способом было бы передать обратный вызов функции или вернуть операцию db в качестве обещания и цепочки. Некоторая документация по Обещаниям в javascript находится здесь.

С обратным вызовом:

class CartDB {
constructor(){

}
totalItems = 0;
checkCountOfProduct(callback){
    query = "SELECT SUM(count) AS product_count FROM Predefinedcart";
   db.transaction((tx) => {
        tx.executeSql(query, [], (tx, results) => {
            console.log(results.rows.item(0).product_count)
            this.totalItems = results.rows.item(0).product_count;
            callback(this.totalItems)
        }, function (tx, error) {
            console.log('SELECT error: ' + error.message);
        });
    })
}
}

и в компе звоните: CartDB.checkCountOfProduct(count => console.log(count));

С обещанием:

class CartDB {
constructor(){

}
totalItems = 0;
checkCountOfProduct(){
    query = "SELECT SUM(count) AS product_count FROM Predefinedcart";
   return new Promise((resolve, reject) => db.transaction((tx) => {
        tx.executeSql(query, [], (tx, results) => {
            console.log(results.rows.item(0).product_count)
            this.totalItems = results.rows.item(0).product_count;
            resolve(this.totalItems);
        }, function (tx, error) {
            reject(error);
        });
    }))
}
}

и в компе звоните: CartDB.checkCountOfProduct().then(count => console.log(count));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...