2016-09-12 5 views
0

私はSockJSでwebsocketイベントをリッスンしていて、受信したオブジェクトを配列の$scope.mails.itemsに挿入したいとします。私は以下のコードスニペットを持っています。私の問題は何らかの理由でmessageを遅延機能に渡すことができないことです。私は知っている...私はこの問題に関するいくつかの説明を繰り返して尋ねたが、この特定のケースではうまくいかない理由を理解できなかった。私がこれを遅らせる必要がある理由は、それが私の見解に適用されることを確認したいのですが、そうでなければそうしないということです。

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); 
    }); 

それをデバッグするとき、私はmessage変数が適切な値を持っていますが、それは私の遅れ関数の途中で停止することになると、mがデータを取得していない、しかし私は$timeoutがそれを渡すことを期待することがわかりますダウン。

助けてもらえますか?

+1

'$ timeout'関数の中に' console.log(arguments) 'を記録することができます。おそらく最初の議論ではなく、おそらく 'm' –

+1

になるはずです。 '$ timeout(function(m){...} .bind(message))'のように、代わりに 'bind'を試してみましたか?(カスタムトリックの代わりにもっと慣用的なJS) Btw、答えが示唆しているように 'm'の代わりに' message'をここで直接使うことはできません。 – estus

答えて

0

ないのはなぜmは値(説明歓迎)取得されていませんが、この作品を確認してください。

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

'$ timeout()'の引数として 'message'は必要ありません。あなたのjavascriptスコープですでに利用可能であるからです。 – charlietfl

+0

正直なところ、' message'を真後から取り除くことができます。私は最初に私の間違いが何だったのだろうか。とにかく、ありがとう! – jabal

0

$タイムアウトのコールバック関数は、任意のパラメータを取りません。そのmパラメータは常にnullになるでしょう。外側の関数からメッセージパラメータを使用するだけです。

関連する問題