2016-09-12 5 views
0

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?

+1

können Sie 'console.log (Argumente)' in '$ Timeout' Funktion protokollieren. es ist vielleicht nicht dein erstes Argument, das du erwartest, das 'm' zu sein –

+1

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

Antwort

0

nicht sicher, warum m nicht immer Wert (Erklärung willkommen), aber dies funktioniert:

MyService.receive().then(null, null, function(message) { 
      $timeout(function() { 
       if($scope.mails.items.indexOf(message) == -1) { 
        $scope.mails.items.push(message); 
       } 
      }, 0, true, message); 
    }); 
+1

brauchen nicht einmal "message" als Argument von '$ timeout()', da es bereits in Ihrem JavaScript-Bereich verfügbar ist. – charlietfl

+0

Richtig, ich kann 'message' von nach true entfernen und es funktioniert immer noch. Ich frage mich, was war mein Fehler zunächst? Trotzdem danke! – jabal

0

Die Callback-Funktion für $ timeout hat keine Parameter übernehmen. Dieser m-Parameter wird immer null sein, verwenden Sie einfach den Nachrichtenparameter der äußeren Funktion.

Verwandte Themen