javascript - react-native-sqlite-storage 简单的 dao
问题描述
我是 JS 新手,并且反应原生。我想做一个简单的 dao,例如方法 'getAllStudents()' 并返回学生列表。但是当我尝试这样的事情时,我得到了一个承诺对象,并且不知道如何从中提取学生。
getAllStudents() {
return new Promise((resolve, reject) => {
this.db.transaction((tx) => {
tx.executeSql('SELECT * FROM Student', [], (tx, results) => {
console.log("Query completed");
var len = results.rows.length;
let allStudents = '';
for (let i = 0; i < len; i++) {
let row = results.rows.item(i);
console.log(`Record: ${row.name}`);
allStudents = allStudents + row.studentId + '. ' + row.Name + ' ' + row.surname + '\n';
}
resolve(allStudents);
});
});
});
}
任何人都可以帮忙吗?
解决方案
该函数返回一个承诺,您可以简单地.then()
使用它来获取数据,如下所示:
getAllStudents()
.then(data => {
console.log("I got some data:",data);
})
.catch(error => {
console.error(error);
})
或者,如果您不想使用这样的承诺,您可以进行 async/await 调用。
在调用您的函数的代码中,您将执行以下操作:
const data = await getAllStudents()
这里有一个教程可以帮助你理解 async/await: https ://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9
对于那些以前从未听说过这个话题的人,这里有一个快速介绍
Async/await 是一种编写异步代码的新方法。以前的异步代码选项是回调和承诺。Async/await 实际上是建立在 Promise 之上的。它不能与普通回调或节点回调一起使用。Async/await 就像 Promise 一样,是非阻塞的。Async/await 使异步代码的外观和行为更像同步代码。这就是它的全部力量所在。