因此,当我尝试通过循环检查,更新并将数据发布到我的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);
}
答案 0 :(得分:1)
问题是你在for循环中获取数据并在循环中更改它。这意味着您在循环中使用的数据随着每次迭代而变化。作为额外的奖励,你可以获得firebase异步性质的效果,如下所示:
为了防止这一切,我建议将for循环放在tempRef.once函数中,如下所示:(伪代码)
tempRef.once{
Loop through data{
Change data
}
Update data
}
这意味着您只需获取一次数据并更新一次。