【发布时间】:2023-03-04 14:13:02
【问题描述】:
我有一个结构如下的组件:
const _dbCall = () => {
const fooDb = SQLite.openDatabase(db);
return new Promise(resolve => {
fooDb.transaction(tx => {
tx.executeSql(`SOME SQL`, [], (tx, results) => {
resolve(results.rows._array);
}, null);
});
})
}
async function _renderSomething() {
const results = await _dbCall();
return <FlatList
data={results}
renderItem={_renderFunc}
keyExtractor={item => item} />
}
我在Component 的render() 函数中使用_renderSomething()。
但是,这给了我:
错误:对象作为 React 子对象无效(找到:带有键 {_U、_V、_W、_X} 的对象)。如果您打算渲染一组子项,请改用数组。
这个{_U, _V, _W, _X} 对我来说似乎是一个未解决的承诺。
当我从renderSomething() 中删除async 关键字时,注释const results = ... 并将一些虚拟数据传递给<FlatList ...,它会毫无问题地呈现。
为什么renderSomething() 不返回<FlatList ... 而是一个未解决的承诺?
【问题讨论】:
-
异步函数总是返回一个承诺。 1.用空数组的初始值创建一个状态。 2. 将该空数组传递给
FlatList。 3. 获取数据,更新状态。 4. 组件将重新渲染,将填充的数组传递给FlatList组件。 -
你尝试过 try catch 块吗?
标签: javascript reactjs async-await es6-promise resolve