Обещание вызовов в React Native - PullRequest
1 голос
/ 11 марта 2019

Новый для React Native и Javascript в целом. В настоящее время я пытаюсь принять Обещание для обработки неопределенной ошибки при использовании пакета react-native-sqlite-storage.

Я следил за этим предыдущим постом здесь , но мне не удалось правильно выполнить Обещание из того, что я могу сказать.

Вот моя текущая функция:

nextPackage (q_id: number) {
    return new Promise((resolve, reject) =>
        db.transaction(tx => { 
            tx.executeSql(
                'SELECT * FROM Questions INNER JOIN Choices on Choices.q_id = Questions.global_id WHERE Questions.global_id = ?', [q_id], (tx, results) => {
                    for (let i = 0; i < results.rows.length; i++) {
                        console.log('item:', i);
                        console.log('row:', results.rows.item(i));
                        this.pack.push(results.rows.item(i));
                    }
                    resolve(this.pack);
                }, function (tx, error) {
                    reject(error);
            });
        })
    )
}

И экран, который вызывает его:

this.pack = this.wrapper.nextPackage(this.session.data_next.qID)
        .then(data => { 
            console.log("Retrieved data: ", data);
        })
        .catch(error => {
            console.error(error);
        })

    this.pkHelp = new PackageHelper(this.pack);

Однако, когда я пытаюсь получить доступ к this.pack[0], я получаю undefined is not an object (evaluating 'this.pack[0].choiceType'). console.log () показал, что строки базы данных действительно читаются, и что choiceType действительно является правильным именем столбца.

Заранее благодарим за любую помощь!

1 Ответ

2 голосов
/ 11 марта 2019

Вы не можете присвоить значение вашему пакету, как это. Возвращаемое значение находится в части then. Вы можете сделать что-то вроде этого

this.wrapper.nextPackage(this.session.data_next.qID).then(data => {
   this.pkHelp = new PackageHelper(this.pack);
}).catch(error => {
   console.error(error);
});

Или вы можете использовать await. Но вы должны использовать его в функции async

try {
   this.pkHelp = await this.wrapper.nextPackage(this.session.data_next.qID);
   this.pkHelp = new PackageHelper(this.pack);
} catch(error) {
   console.error(error);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...