Может получить доступ к содержимому массива в реагирующем - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь получить данные из базы данных SQLite в React-Native (Android). Функция возвращает массив с данными. Если я пытаюсь записать массив на консоль, он работает нормально, но когда я записываю длину массива на консоль, он неожиданно выводит «0».

Функции:

getActByButton(category) {
        return new Promise((resolve) => {
            const activities = [];
            const request = 'SELECT activity FROM activity_button WHERE category = ? AND activity IS NOT NULL';
            this.initDB().then((db) => {
                db.transaction((tx) => {
                    tx.executeSql(request, [category]).then(([tx, results]) => {
                        //console.log('Query COMPLETED');
                        var len = results.rows.length;
                        for (let i = len; i > 0; i--) {
                            activities.push(results.rows.item(i - 1));
                        }
                        resolve(activities);
                    })
                }).then((result) => {
                    this.closeDatabase(db);
                })
            })
        })
    }

    getIconByAct(activity_ids) {
        return new Promise((resolve) => {
            const icons = [];
            const request = 'SELECT name, icon FROM activity WHERE id = ?';
            this.initDB().then((db) => {
                db.transaction((tx) => {
                    for (let id in activity_ids) {
                        tx.executeSql(request, [id]).then(([tx, results]) => {
                            console.log('Query COMPLETED');
                            var len = results.rows.length;
                            let icon = results.rows.item(0).icon;
                            let description = results.rows.item(0).name;
                            icons.push({ icon, description });
                        })
                    }
                    resolve(icons);
                }).then((result) => {
                    this.closeDatabase(db);
                })
            })
        })
    }

Функция вызова:

db.getActByButton(this.props.category).then((data) => {
    result_ids = data;
}).then(() => {
    db.getIconByAct(result_ids).then((data) => {
        console.log('DATA:');
        console.log(data);
        console.log(data.length);
        console.log(data[1]);
    })
})

Консоль: enter image description here

Как это возможно? И как я могу это исправить?

1 Ответ

0 голосов
/ 28 мая 2019

Попробуйте это:

db.getActByButton(this.props.category).then((data) => {
    result_ids = data;
}).then(() => {
    db.getIconByAct(result_ids).then((data) => {
        console.log(JSON.stringify(data));
        console.log(JSON.stringify(data.length));
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...