错误在标题中。
我正在构建的应用程序基于React和Firebase。 我正在尝试使用承诺。 这是我的代码:
gamesRef.on('value').then(function(snapshot){
// find all empty games
var gamesToRemove = [];
snapshot.forEach(game => {
if(game.val().player1 == ""
&& game.val().player2 == ""
&& game.val().player3 == ""
&& game.val().player4 == ""){
gamesToRemove.push(game.key());
}
});
return gamesToRemove;
}).then(function(gamesToRemove){
// remove all empty games
for(var index in gamesToRemove){
gamesRef.child(gamesToRemove[index]).remove();
}
}, function(error){
console.log(error);
});
我发现this question on SO解决了同样的问题。解决方案是Firebase版本需要至少2.4才能使用promises。我使用的是旧版本,但在升级到2.4.2之后,我仍然遇到了同样的错误。我该怎么办?
编辑:修复后的代码。得到错误“gamesRef.on(...)。然后不是一个函数”。
gamesRef.on('value', function(snapshot){
// find all empty games
var gamesToRemove = [];
snapshot.forEach(game => {
if(game.val().player1 == ""
&& game.val().player2 == ""
&& game.val().player3 == ""
&& game.val().player4 == ""){
gamesToRemove.push(game.key());
console.log("denna borde raderas: " + game.key());
}
});
return gamesToRemove;
}).then(function(gamesToRemove){
// remove all empty games
for(var index in gamesToRemove){
gamesRef.child(gamesToRemove[index]).remove();
}
});
答案 0 :(得分:10)
关于on +,你有错误的心态,
on接受2个参数:事件的名称,回调,回调只是普通函数,它将事件作为参数:
endpoints.jmx.domain=applicationname
然后,你可以使用你的那个:D
答案 1 :(得分:10)
虽然Firebase JavaScript client return a promise中有很多功能,on()
不是其中之一。
原因是on()
通常会多次传递一个值,而承诺的契约是then()
最多只能解决一次。
如果您只关心获取数据的价值一次,您可以使用once()
和承诺:
gamesRef.once('value').then(function(snapshot){
// find all empty games
var gamesToRemove = [];
snapshot.forEach(game => {
if(game.val().player1 == ""
&& game.val().player2 == ""
&& game.val().player3 == ""
&& game.val().player4 == ""){
gamesToRemove.push(game.key());
}
});
return gamesToRemove;
}).then(function(gamesToRemove){
// remove all empty games
for(var index in gamesToRemove){
gamesRef.child(gamesToRemove[index]).remove();
}
}.catch(function(error){
console.log(error);
});