2016-08-04 16 views
1

私は$.each()が約束を使って終了した後に関数を呼び出そうとしています。しかし、次のコードを試してみると、Uncaught TypeError: $.each(...).promise is not a functionが得られます。jQuery後の約束

$.each(snapshot.val(), function(chat, i){ 
    firebase.database().ref('chats/'+chat+'/msgs').once('value', function(snap){ 
     if (Object.keys(snap.val())[0] != i){ 
       notification = true; 
     } 
    }); 
}).promise().done(function(){ alert("All was done"); }); 

私は比較的新しい約束をしていますが、どうすればこの問題を解決できるか教えていただけますか?

+0

私はファイヤーベースに慣れていません。その関数はコールバックに一度渡されますか?言い換えれば、1つのdbリクエストだけを実行していた場合、完了時に呼び出される関数はどこですか? – thedarklord47

+0

それは、コールバック関数を持つデータベースへの非同期呼び出しです。これはコードの一部ではありません。 – MarksCode

+0

あなたが約束を解決する必要がある場所を確認してください。私の答えを確認してください – thedarklord47

答えて

2

その関数がonceに渡された場合、あなたのコールバックは次のようになります。

var promises = []; 

$.each(snapshot.val(), function(chat, i){ 
    var dfd = $.Deferred(); 
    firebase.database().ref('chats/'+chat+'/msgs').once('value', function(snap){ 
     if (Object.keys(snap.val())[0] != i){ 
      notification = true; 
     } 
     dfd.resolve(); 
    }); 
    promises.push(dfd); 
}) 

$.when.apply($, promises).done(function() { 
    alert("All was done"); 
}); 
+0

すべての '.each()'が終了した後に '.done()'関数を実行しようとしています。 – MarksCode

+1

あなたは実際にそれがそれぞれの終了後に実行したいですか?またはすべての非同期呼び出しが終了した後? – thedarklord47

+0

私は関数がすべて終了した後に関数を呼び出そうとしています – MarksCode