javascript - 我怎样才能得到正确的响应承诺?
问题描述
我正在尝试调用我的数据库,然后将数据放入一个状态中。我尝试了很多不同的方式,但我总是得到这种类型的响应:
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 中。
提前致谢
解决方案
您可以最初将espaces
状态设置为空数组,然后使用useEffect
挂钩来获取数据并在解析时设置状态:
const [espaces, setEspaces] = useState([])
useEffect(() => {
getEspaces().then(data => setEspaces(data))
}, [])
我希望这有帮助。
推荐阅读
- java - Orika 将两个 String 字段映射为一个 - 考虑到其余字段
- widget - Flutter Inspector Toggle Select Widget 模式不起作用。
- node.js - SQLite3 + Node.js - 我应该为每个 INSERT 打开和关闭数据库还是让它始终打开?
- android - 加载多个位图
- .net - WerFault 系统错误 Visual Studio
- jquery - jQuery $(this) 而不是多个 id
- r - 如何正确更改 R 中 rcpp 中的 ListMatrix 列表
- json - 发送 JSON 内容类型的 POST 请求并在 VB.NET 中显示 JSON 响应
- c# - 从 Core 2 迁移到 Core 2.1 时将 DbContext 作为 DI
- ruby-on-rails - ActiveRecord::StatementInvalid: PG::UndefinedTable: 错误: 与 HABTM 关联与导轨的关系