如何多次更新Firebase

时间:2016-04-21 05:30:37

标签: javascript firebase firebase-realtime-database

因此,当我尝试通过循环检查,更新并将数据发布到我的Firebase存储时,似乎每当我尝试使用Firebase.update()时,它就会与我的for循环混淆并重复增量或者根本不增加。有什么建议吗?

我的代码:

var j = 0;
    var k = 0;
    var l = 0;
    var m = 0;
    var setDict = {};
    for(var h = 0; h < teamWinNames.length; h++)
    {
        console.log(j);
        console.log(h);
        console.log(meWinList[j]);
        var tempRef = new Firebase("https://mycounter-app.firebaseio.com/user/" + username + "/championData");
        var tempName = teamWinNames[h];
        tempRef.once("value", function (teamWinSnapshot)
        {
            var exists = teamWinSnapshot.child(meWinList[j] + '/' + tempName).exists();
            console.log(exists);
            if(exists == true)                  
            {
                console.log("Here");
                var tempVal = teamWinSnapshot.child(meWinList[j] + '/' + tempName).val();
                console.log(tempVal);
                //var tempValue = obj[tempname][tempchamp];
                //console.log(tempValue);
            }
            else
            {
                setDict[tempName] = '1-0-0-0';
                console.log(setDict);
            }

        });
        if(h != 0 && (h+1)%4 == 0)
        {
            sendUpdate(setDict, meWinList[j], username);
            setDict = {};
            j++;
        }
    }

以及进行更新的功能:

function sendUpdate(data, champ, username)
{
    var tempRef = new Firebase("https://mycounter-app.firebaseio.com/user/" + username + "/championData");
    tempRef.child(champ).update(data);
}

1 个答案:

答案 0 :(得分:1)

问题是你在for循环中获取数据并在循环中更改它。这意味着您在循环中使用的数据随着每次迭代而变化。作为额外的奖励,你可以获得firebase异步性质的效果,如下所示:

  • 获取数据(1)
  • 获取数据(2)
  • 更新数据(1)
  • 获取数据(3)
  • 更新数据(3)
  • 更新数据(2)

为了防止这一切,我建议将for循环放在tempRef.once函数中,如下所示:(伪代码)

tempRef.once{
    Loop through data{
        Change data
    }
    Update data
}

这意味着您只需获取一次数据并更新一次。