首页 > 解决方案 > 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);
            });
        });
    });
}

任何人都可以帮忙吗?

标签: javascriptreact-native

解决方案


该函数返回一个承诺,您可以简单地.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 使异步代码的外观和行为更像同步代码。这就是它的全部力量所在。


推荐阅读