【发布时间】:2021-11-23 10:57:37
【问题描述】:
const loadData = async () => {
try {
const data = await GetAllForms();
setAllForms([...data]);
} catch (err) {
console.log(err);
}
}
我的变量数据正在接收来自GetAllForms 的数据(这是一个承诺函数),但是当我尝试分配给另一个变量时是空的,例如在这个控制台日志中显示一个空数组。但是,如果我只是 console.log(data) 数据显示正确,则问题仅出在 dataAux
我不知道这里发生了什么。
谢谢!
这里是 GetAllForms
export async function GetAllForms() {
const formRef = await dbForms.collection("forms");
const snapshot = await formRef.get();
const dataFormattedArray = [] as IFormsFormatted[];
snapshot.forEach(async doc => {
const docData = doc.data() as IForms
const aux = [] as FormsData[];
for (const id of docData.formsFieldId) {
const test = await GetOneFormsField(id);
aux.push(test);
}
const dataFormatted = { ...docData, formsFieldId: [...aux] }
dataFormattedArray.push(dataFormatted);
})
return dataFormattedArray;
}
如果我在 setAllForms 之后检查 de allForms 变量,则为空。
【问题讨论】:
-
GetAllForms()实际上是返回一个数组吗?旁注 - 在 setAllForms() 中传递dataAux时,您不必传播它。它已经被传播了,你没有改变它的状态。 (我还假设您将在那里对 dataAux 做更多的事情,而不仅仅是 console.log 它)。 -
不清楚你为什么要复制这么多副本。你就不能
setAllForms(data)吗? -
您的
getAllForms可能是问题所在,您能出示一下代码吗? -
这意味着 GetAllForms 或其他负责修改数据的东西被搞砸了并导致了竞争条件,即在 GetAllForms 承诺解决后发生了一些事情。 GetAllForms 对问题至关重要,问题不包含它。
-
我放 dataAux 只是为了查看分配是否正确。仅用于调试建议。是的,GetAllForms 正在返回一个数组
标签: javascript reactjs variables async-await use-state