gpt4 book ai didi

javascript - firebase 查询后数组不保存值的问题

转载 作者:行者123 更新时间:2023-12-02 21:17:40 25 4
gpt4 key购买 nike

函数完成后,变量 HardProblems 不会更新。它正在循环内更新但不保存。这是一个火力调用。例如HardProblems.length 为 0,但不应为零。

function getHardProblems(){
var HardProblems = [];
var foo = [];
db.collection("hardproblems")
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
//console.log(doc.id, " => ", doc.data());
HardProblems.push({docID: doc.id, ...doc.data()});
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});

console.log("Got Hard Problems "+HardProblems.length)
}

最佳答案

您正在异步代码之外记录 HardProbles,请将其移至 then() block 中:

function getHardProblems(){
var HardProblems = [];
var foo = [];
db.collection("hardproblems")
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
//console.log(doc.id, " => ", doc.data());
HardProblems.push({docID: doc.id, ...doc.data()});
});
console.log("Got Hard Problems " + HardProblems.length) // have to have this in the 'then()' block
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}

JavaScript 将在主区域中的所有内容运行后运行异步代码。因此,当您记录 HardProblems 时,即使它是在程序源中的异步代码之后,它也会在异步代码运行之前执行,这就是您看到空数组的原因,因为它仍然是空的。

Flavio 对异步代码和事件循环的工作原理有很好的解释 here .

关于javascript - firebase 查询后数组不保存值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60923557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com