React Native 和 JavaScript 的新手。目前,我正在尝试在使用 react-native-sqlite-storage
时制定一个 Promise 来处理未定义的错误。包。
我正在关注上一篇文章 here ,但据我所知,还没有成功地正确实现 Promise。
这是我当前的功能:
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 确实是正确的列名。
预先感谢您的帮助!
最佳答案
您不能像这样将值分配给您的包。返回值位于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);
}
关于javascript - React Native 中的 Promise 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093691/