Javascript 答应打电话来

Javascript 答应打电话来,javascript,react-native,react-native-android,Javascript,React Native,React Native Android,新的反应本机和Javascript的一般。目前,我正试图承诺在使用react native sqlite存储包时处理未定义的错误 我一直在关注上一篇文章,但据我所知,并没有成功地履行承诺 以下是我目前的职能: nextPackage (q_id: number) { return new Promise((resolve, reject) => db.transaction(tx => { tx.executeSql(

新的反应本机和Javascript的一般。目前,我正试图承诺在使用
react native sqlite存储
包时处理未定义的错误

我一直在关注上一篇文章,但据我所知,并没有成功地履行承诺

以下是我目前的职能:

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[0]
时,我收到一个
undefined不是对象(计算'this.pack[0].choiceType')
。console.log()显示数据库行确实正在被读入,choiceType确实是正确的列名


提前感谢您的帮助

您不能像这样将值分配给您的包。返回值在
然后
部分中。你可以这样做

this.wrapper.nextPackage(this.session.data_next.qID).then(data => {
   this.pkHelp = new PackageHelper(this.pack);
}).catch(error => {
   console.error(error);
});
或者您可以使用
wait
。但是您必须在
async
函数中使用它

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