AngularJS$q和承诺以及任务混淆



所以,我想知道为什么我会看到这种特殊的行为。我不确定我是否不了解promise、JavaScript或Angular是如何工作的,但以下是正在发生的事情(我设置了这个plnkr来演示-http://plnkr.co/edit/ZKXkUv?p=preview):

<html ng-app="queue">
<head>
  <title>$q resolves for no one</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-resource.js"></script>
  <script>
    angular.module('queue', ['ngResource'])
      .controller('queueCtrl', ['$scope', '$q', function($scope, $q)
      {
        var _funk = true;
        $scope.testing2;
        var deferred = $q(function(resolve, reject)
        {
          if (_funk) {
            resolve({funk: 'yes'});
          } else {
            reject({funk: 'no'});
          }
        });
        deferred.then(function(resolved){
          console.log(resolved.funk)
        }, function(rejected){
          console.log(rejected);
        })
        function defReuse()
        {
          var toBeRet = {};
          deferred.then(function(resolved){
            console.log('yea')
            $scope.testing2 = resolved;
            angular.copy(resolved, toBeRet);
          }, function(rejected){
            toBeRet = rejected;
          })
          return toBeRet;
        }
        $scope.testing = defReuse();
      }]);
  </script>
</head>
<body ng-controller="queueCtrl">
  {{testing.funk}}
  {{testing2.funk}}
</body>
</html>

我需要从承诺中得到回报。我认为最简单的方法是分配给promise对象之外的对象。如果你查看plnkr,你会发现我通过赋值给$scope变量或使用angular.copy()成功地获得了值。然而,我不能成功地直接赋值给defReuse()函数中返回的变量,这很奇怪。我应该在这里补充一点,我已经在全局范围内声明了我试图分配给的toBeRet变量,并得到了相同的结果。

所以,问题是为什么?$scope变量是否存在我忽略的地方?或者Angular是如何工作的?或者承诺是如何运作的?目前这有点神秘。。

angular中的

$q帮助我们异步运行函数。这个返回promise,一旦它解析了相应的then方法,就会被调用。请通过以下链接了解$q和angular 中的承诺

  • https://docs.angularjs.org/api/ng/service/$q
  • http://chariotsolutions.com/blog/post/angularjs-corner-using-promises-q-handle-asynchronous-calls/

相关内容

  • 没有找到相关文章

最新更新