2016-08-04 14 views
1

Ich versuche, eine Funktion aufzurufen, nachdem meine $.each() mit einem Versprechen beendet. Wenn ich jedoch den folgenden Code versuche, bekomme ich Uncaught TypeError: $.each(...).promise is not a function.Versprechen nach jQuery jeder

Ich bin relativ neu zu versprechen, kann mir jemand sagen, wie ich das bitte reparieren kann?

+0

Ich bin mit Firebase nicht vertraut. Wird diese Funktion einmal an Ihren Rückruf weitergeleitet? Mit anderen Worten, wenn Sie nur eine db-Anfrage gemacht haben, wo wird die Funktion aufgerufen, wenn sie fertig ist? – thedarklord47

+0

Ja, es ist ein asynchroner Aufruf einer Datenbank mit einer Callback-Funktion. Das ist nicht der Teil des Codes, der nicht funktioniert. – MarksCode

+0

richtig, nur um sicherzustellen, dass das ist, wo Sie das Versprechen lösen müssten. überprüfe meine Antwort – thedarklord47

Antwort

2

Wenn also diese Funktion an once übergeben wurde, ist Ihr Rückruf, das folgende sollte Ihnen helfen.

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

Ich versuche, die Funktion in der '.done()' zu bekommen, nachdem alle '.each()' fertig sind. – MarksCode

+1

willst du eigentlich, dass es nach jedem Ende ausgeführt wird? oder nachdem alle asynchronen Anrufe beendet sind? – thedarklord47

+0

Ich versuche, eine Funktion zu rufen, nachdem sie alle fertig sind – MarksCode

Verwandte Themen