2016-05-10 8 views
2

エラーはタイトルにあります。Firebase:Query.on failed:1つの引数で呼び出されました。少なくとも2を期待します

私の建物はReactとFirebaseに基づいています。 私は約束を使用しようとしています。私は同じ問題に対処this question on SOを見つけ

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); 
    }); 

: はここに私のコードです。解決策は、Firebaseのバージョンが約束を使用するために少なくとも2.4である必要があるということでした。以前のバージョンを使用しましたが、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(); 
     } 
    }); 

答えて

4

あなたはその後、+で約間違った考え方を持っているが、上の

は、2つの引数を取ります。

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()); 
    } 
    }); 
    return gamesToRemove; 
}) 
:イベントの名前、およびコールバックを、コールバックは引数としてイベントを取る単なる関数であります

を入力してから使用することができます。D

+0

[OK]を、ありがとう!あなたが言ったように私はした、そしてエラーはdisapeared。しかし、私は新しいものを得ました: "gamesRef.on(...)、それは関数ではありません"。私はそれをどうやって修正するか知っていますか?私は質問に更新を加えました。 – hellogoodnight

+1

あなたはまっすぐに行かないでください。 'gamesRef.on( '値'、関数(スナップショット){ //すべての空のゲーム見つける VAR gamesToRemove = []; snapshot.forEach(ゲーム=> { (game.val()もしplayer1 = = "")&& game.val()。player2 == "" && game.val()。player3 == "" && game.val()。player4 == "" { gamesToRemove.push(game .KEY());} }); gamesToRemoveで(VAR指数){ gamesRef.child(gamesToRemove [インデックス])のための(削除)。 }; }); ' –

7

Firebase JavaScript client return a promiseの多くの機能は、on()の1つではありません。

on()は通常値を複数回配信しますが、約束の契約ではthen()が最大で1回解決されるという理由があります。

あなたは一度だけデータの値を得ることについて気にした場合、あなたは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); 
}); 
+0

にしていただきありがとうございますシンプルで明確な説明 – Akil

関連する問題