首页 > 解决方案 > 我怎样才能得到正确的响应承诺?

问题描述

我正在尝试调用我的数据库,然后将数据放入一个状态中。我尝试了很多不同的方式,但我总是得到这种类型的响应:

Promise {
  "_40": 0,
  "_55": null,
  "_65": 0,
  "_72": null,
}

这是我调用的函数:

function getEspaces() {
    return new Promise((resolve) => {
        db.transaction(tx => {
            tx.executeSql(
                `SELECT * FROM Espace`, [], (tx, results) => {
                    let espaces: Espace[] = [];
                    for (let cpt = 0; cpt < results.rows.length; cpt++) {
                        const item = results.rows.item(cpt)
                        const espace: Espace = {
                            name: item.name,
                            id_espace: item.id_espace
                        }
                        espaces.push(espace);
                    }
                    console.log("Get espaces");
                    resolve(espaces);
                });
        });
    });
}

这是我从另一个组件调用它的地方:

const [espaces] = useState(getEspaces());

我该如何解决?我不能将 await 放在 setState 中。

提前致谢

标签: javascriptreactjsreact-native

解决方案


您可以最初将espaces状态设置为空数组,然后使用useEffect挂钩来获取数据并在解析时设置状态:

const [espaces, setEspaces] = useState([])

useEffect(() => {
  getEspaces().then(data => setEspaces(data))
}, [])

我希望这有帮助。


推荐阅读