参考$ timeout内的外部函数参数

时间:2016-09-12 21:49:41

标签: javascript angularjs

我正在使用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将其传递下去。

你能帮忙吗?

2 个答案:

答案 0 :(得分: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 :(得分:0)

$ timeout的回调函数不带任何参数。该m参数始终为null,只需使用外部函数中的message参数。