繁体   English   中英

将嵌套的Promise返回给父函数

[英]Return nested promise to parent function

在大多数angularjs教程中,我已经看到Promise链导致更改范围变量。

$http.get(someURL).then(function (value) {
    $scope.someValue = value;
});

是否可以将该值返回给父函数? 我尝试过的方法只会返回另一个承诺。

$scope.test = function(){
    return $http.get(someURL).then(function (value) {
        return value;
    });
};

$scope.test = function(){
    var deferred = $q.defer();
    $http.get(someURL).then(function (value) {
        deferred.resolve(value);
    });
  return deferred.promise;
}

我不想链接另一个诺言,只返回json即可执行以下操作:

<button ng-click='some_vars = test()'>Get ajax</button>
<ul ng-repeat='var in some_vars'>
    <li>{{var.title}}</li>
</ul>

IMO,这是您应该这样做的方式:

在您的控制器中执行以下操作:

$scope.some_vars=[];
$scope.loadVars = function(){
    $http.get(someURL).success(function (data) {
        $scope.some_vars=data;
    });
};

您认为这样做:

<button ng-click='loadVars()'>Get ajax</button>
<ul ng-if="some_vars.length>0" ng-repeat='var in some_vars'>
    <li>{{var.title}}</li>
</ul>

容易得多,对吗?

但是, 如果您使用的是1.2.0-rc.3。之前的Angular版本。 并且您确实想自动取消承诺( 我强烈建议您反对 ),则必须在模块的配置中更改$parseProvider的设置,如下所示:

.config(function($parseProvider){
  $parseProvider.unwrapPromises(true);
})

工作实例

Promise unwrapping已在1.2版中删除,并且在1.2.0-rc.3。版中已完全弃用。

您可能需要看一下本文档: 从以前的版本迁移

$ parse:由于fa6e411d,诺言解包已被删除。 从1.2.0-rc.3。开始不推荐使用。 不能再打开它。 删除了两种方法:

  $parseProvider.unwrapPromises $parseProvider.logPromiseWarnings 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM