如何将承诺转换为它持有的数组?
How do I convert a promise into the array it holds?
我正在使用 React useReducer 并尝试显示从 firebase 获取的信息。
async function reducer(listState, action) {
switch (action.type) {
case "load":
let stateCopy2 = [...listState];
let result = await firebase.firestore().collection("contractors").doc(action.idList[0].id).get()
console.log("non promise/ console log 1",result.data())
return [...stateCopy2, result.data()]
default:
throw new Error();
}
}
function Thing(props) {
return (
<div >
{listState.map((data, index) => (
<div>
{data.Bio}
</div>
))}
<button onClick={()=>console.log("promise/ console log 2", listState)}>check</button>
</div>
)
}
export default Thing;
在执行 console.log(listState) 时;
在 console.log 1 处,信息显示了它应该显示的内容。应有尽有:
{BIo:"hello"}
at console.log 2 显示的信息是:
Promise {<fulfilled>: Array(2)}
其中显示原始信息。
转换后,由于 listState 是 promise,因此无法映射。
我如何将 promise 变成数组或者不让它像这样显示?
通过将你的 reducer 标记为 async
,你就是在 return 一个 Promise。因此,您需要 await
它才能获得它的价值。
我有点惊讶 listState.map
调用没有在你身上爆炸,但我承认我并没有真正仔细地观察过,并且从你的代码中不清楚 listState
来自您的 Thing
组件。
对我来说,拥有一个异步减速器感觉就像 一个坏主意™,因为减速器的工作只是更新状态以响应一个动作。 Whosebug 上的其他地方 可能会有帮助。
您可以声明一个 onClick AsyncFunction:
onClick={async () => console.log("promise/ console log 2", await listState)}
或者简单地在“then”方法中做一个控制台:
onClick={listState.then(data => console.log("promise/ console log 2", data))}
我正在使用 React useReducer 并尝试显示从 firebase 获取的信息。
async function reducer(listState, action) {
switch (action.type) {
case "load":
let stateCopy2 = [...listState];
let result = await firebase.firestore().collection("contractors").doc(action.idList[0].id).get()
console.log("non promise/ console log 1",result.data())
return [...stateCopy2, result.data()]
default:
throw new Error();
}
}
function Thing(props) {
return (
<div >
{listState.map((data, index) => (
<div>
{data.Bio}
</div>
))}
<button onClick={()=>console.log("promise/ console log 2", listState)}>check</button>
</div>
)
}
export default Thing;
在执行 console.log(listState) 时; 在 console.log 1 处,信息显示了它应该显示的内容。应有尽有:
{BIo:"hello"}
at console.log 2 显示的信息是:
Promise {<fulfilled>: Array(2)}
其中显示原始信息。
转换后,由于 listState 是 promise,因此无法映射。
我如何将 promise 变成数组或者不让它像这样显示?
通过将你的 reducer 标记为 async
,你就是在 return 一个 Promise。因此,您需要 await
它才能获得它的价值。
我有点惊讶 listState.map
调用没有在你身上爆炸,但我承认我并没有真正仔细地观察过,并且从你的代码中不清楚 listState
来自您的 Thing
组件。
对我来说,拥有一个异步减速器感觉就像 一个坏主意™,因为减速器的工作只是更新状态以响应一个动作。 Whosebug 上的其他地方
您可以声明一个 onClick AsyncFunction:
onClick={async () => console.log("promise/ console log 2", await listState)}
或者简单地在“then”方法中做一个控制台:
onClick={listState.then(data => console.log("promise/ console log 2", data))}