このサイトの私のrecent question(私が "Promise"技術に頼る前)から、変数をファイアベースデータベースに保存するのではなく、私はそれを(たとえ非同期のものであっても)すべての関数で使うことができるように、javascriptのグローバル変数です。それがログインしているユーザーのための対応するキー保存されたので、Firebaseのデータが内容を持っていてもUNDEFINEDの値を返す
function logIn(){
\t var loggedUname = $("#loginUname").val();
\t var loggedPword = $("#loginPword").val();
\t
\t var tailorRef = firebase.database().ref('tailors');
\t var keyRef = firebase.database().ref();
\t
\t tailorRef.on('value', function(data){
\t \t data.forEach(function(childData){
\t \t \t if ((loggedUname == childData.val().tUsername) && (loggedPword == childData.val().tPassword)){
\t \t \t \t currentKey = childData.key;
\t \t \t }
\t \t });
\t \t keyRef.update({currentTailor: currentKey});
\t \t alert("key = " + keyRef.currentTailor);
\t });
\t
}
.update方法が成功した:だから私はこのコードを作っ
を私がしようとすると、アラートを使用して検索するには、「未定義」と表示されます。データベースのルート参照から呼び出していると仮定しているため、理解できません。
私はkeyRefに対して別々の.on()関数を作ってみましたが、それでも同じ結果です。
keyRef.on('value', function(data){
alert(data.currentTailor);
});
私は間違った方法でデータを呼ばれていましたか?
Firebaseについてはわかりませんが、 'keyRef.update()'は非同期です。 – Barmar
https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html .then(function(){alert()})の方法を試してください – Ayudh
@Barmar私は.update ()を私のsignUp関数に追加し、このlogin()関数に格納されていたデータを正常に取得しました。もしあなたが言ったことであれば、私はこの関数のtUsernameとtPasswordを取得できないはずです。 – Kaddy03