JavaScript变量在函数内部不会更改
我在为Firebase函数编写一些函数时遇到了一个问题。我想找到PFM中存储的值最高的用户,并将其名称保存在一个变量中,但该变量不会更改。我做错了什么 这是我的密码:JavaScript变量在函数内部不会更改,javascript,function,firebase,variables,firebase-realtime-database,Javascript,Function,Firebase,Variables,Firebase Realtime Database,我在为Firebase函数编写一些函数时遇到了一个问题。我想找到PFM中存储的值最高的用户,并将其名称保存在一个变量中,但该变量不会更改。我做错了什么 这是我的密码: var highestPFM = 0; var userToSend = ""; db.collection("users").get().then((snapshot) => { snapshot.forEach((doc) => { var data = doc.data(
var highestPFM = 0;
var userToSend = "";
db.collection("users").get().then((snapshot) => {
snapshot.forEach((doc) => {
var data = doc.data();
if(highestPFM > data["pfm"]){
highestPFM = data["pfm"];
userToSend = doc.id;
}
});
console.log(prefixSendBottle + "User with highest PFM: " + userToSend);
return userToSend;
}).catch((err) => {
response.send(err);
console.log(err);
});
您正在检查if(highestPFM>data[“pfm”]){
…假设pfm
只有+ve值,则此条件永远不会为真,因此highestPFM
的值永远不会更改
您需要将条件更改为if(data[“pfm”]>highestPFM){
您正在检查if(highestPFM>data[“pfm”]){
…假设您只有pfm
的+ve值,则此条件永远不会为真,因此highestPFM
的值永远不会更改
您需要将条件更改为
if(data[“pfm”]>highestPFM){
@zero298我不认为OP的问题与异步代码有关。这只是代码中的一个逻辑错误。请检查我的答案。@VivekAthalye我不知道,我担心任何时候我看到变量的作用域比异步作用域的作用域更广。也许它与异步代码无关,但我想看看调用t后如何使用highestPFM
o firebase。不管怎样,我们需要更多的上下文。@zero298是的,我可以理解您的担忧,我同意您的看法。:)虽然变量的范围确实可以限制在回调中,但这不是问题的原因。我投票赞成重新打开。@zero298我认为OP的问题与异步代码无关。这只是c中的一个逻辑错误ode.Plz请检查我的答案。@VivekAthalye我不知道,每当我看到一个变量的作用域比异步作用域的作用域更宽时,我都会担心。也许这并不相关,但我想看看调用firebase后如何使用highestPFM
。不管怎样,我们都需要更多的上下文。@zero298是的,我可以理解您的担忧,我也知道ee同意你的观点。:)虽然变量的作用域可能确实限于回调,但这并不是问题的原因。我投票重新打开。这是我犯的一个非常愚蠢的错误。这是我的建议!这是我犯的一个非常愚蠢的错误。这是我的建议!