Ich höre Websocket Ereignisse mit SockJS und möchte empfangene Objekte in meine $scope.mails.items
, die ein Array ist, einfügen. Ich habe das folgende Code-Snippet und mein Problem ist, dass ich aus irgendeinem Grund nicht in der Lage bin, die message
in meine verzögerte Funktion zu übergeben. Ich weiß ... Ich habe versucht, einige Erklärungen zu diesem Thema wiederholt zu lesen, konnte aber immer noch nicht herausfinden, warum es in diesem speziellen Fall nicht funktioniert. Der Grund, warum ich dies verzögern muss, ist, dass ich sicherstellen möchte, dass es auf meine Ansicht angewendet wird, ansonsten nicht.
MyService.receive().then(null, null, function(message) {
$timeout(function(m) {
if($scope.mails.items.indexOf(m) == -1) {
$scope.mails.items.push(m);
}
}, 0, true, message);
});
Wenn es debuggen, kann ich sehen, dass die message
Variable richtigen Wert hat, aber wenn es zu stoppen in der Mitte meiner verzögerte Funktion kommt, wird m
die Daten nicht bekommen, aber ich würde erwarten, dass $timeout
es passieren Nieder.
Können Sie bitte helfen?
können Sie 'console.log (Argumente)' in '$ Timeout' Funktion protokollieren. es ist vielleicht nicht dein erstes Argument, das du erwartest, das 'm' zu sein –
Es sollte funktionieren. Haben Sie stattdessen 'bind' versucht (eine idiomatische Alternative zu benutzerdefinierten Tricks), wie' $ timeout (function (m) {...} .bind (message)) '? Übrigens, es gibt keinen Grund, warum "Nachricht" nicht direkt hier statt "m" verwendet werden kann (wie die Antwort suggeriert). – estus