JavaScript变量在函数内部不会更改

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(

我在为Firebase函数编写一些函数时遇到了一个问题。我想找到PFM中存储的值最高的用户,并将其名称保存在一个变量中,但该变量不会更改。我做错了什么

这是我的密码:

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同意你的观点。:)虽然变量的作用域可能确实限于回调,但这并不是问题的原因。我投票重新打开。这是我犯的一个非常愚蠢的错误。这是我的建议!这是我犯的一个非常愚蠢的错误。这是我的建议!