1

firebase からデータを取得しています

//user balance check
var balanceRef = new      Firebase('https://****.firebaseIO.com/arcade/grabbit/'+category+'/'+brand+'/'+gameId+'/'+'activePlayers'+'/'+userId+'/');

データを取得する関数は次のとおりです。

//check user balance
function checkBalance(){
balanceRef.on('value', function(snapshot) {
if(snapshot.val()=== null){
  mLeft=0
 } else{
 mLeft=snapshot.val().tokensLeft
        }
 return mLeft 
                             })
 }

ユーザーがボタンをクリックすると、最初に残高を確認します

$('#grabbit').click(function() {

 //call checkBalance function on click
 var myTokensLeft=checkBalance();

 });

ここでの問題は、関数値を NaN または未定義として返すことです

繰り返しテストしましたが、関数は値を返します。クリック時に値を取得できないのはなぜですか? 私は構造に何か間違ったことをしていますか?私はjavascriptに非常に慣れていません

4

2 に答える 2

1

あなたのクリックイベントでは、「値」イベントへの別のリスナーを作成するだけで、そのイベントがいつどのようにトリガーされ、関数がmLeftを返すかを神が知っているようです。

コードで何が起こっているかというと、「#grabit」をクリックするたびに常に新しいリスナーが作成されますが、内部の関数は必ずしも呼び出されるとは限らず、呼び出された場合は非同期で呼び出されます。つまり、終了するまでにすでに「未定義」になっています。

于 2013-10-04T16:10:04.890 に答える