AngularJS 承诺返回空对象

2024-01-01

基本上我想做的是从解析承诺的函数调用中分配一些模型值。像这样

value = someFun()

这是我调用此函数的服务

app.factory('SomeService', function($q) {
    return {
        someFun: function() {
            var d = $q.defer();
            try {
                d.resolve("hi");
            } catch (e) {
                d.reject(e);
            }
            return d.promise.then(function(text){
                return text;
            });
        }
    };
});

这是 HTML 代码

<div ng-init="value = 'yes'">
    <pre>{{value |json}}</pre>
</div>
<button type="button" ng-click="value = someFun()">click me</button>

这是在控制器中

$scope.someFun = SomeService.someFun;

这是plnkr

http://plnkr.co/edit/qO5ofBXZDsi3cS3bBnT8 http://plnkr.co/edit/qO5ofBXZDsi3cS3bBnT8

现在它返回一个空对象。怎么了?

编辑:正如下面已经回答的那样,是的,这是一种方法,但是假设我想在 ngRepeat 中调用 SomeService.someFun ?

编辑2:这是答案 -> ngRepeat 内的 Angular UI Bootstrap 模式 https://stackoverflow.com/questions/25329596/angular-ui-bootstrap-modal-inside-ngrepeat


一般来说,如果您想使用异步更新的内容来显示在视图中,而不必编写控制器代码(您的问题就是这种情况,因为您想调用 ng-view 内的函数),那么您需要返回一个空白占位符对象,并将 Promise 的结果合并到其中,或者更新您可以在视图中引用的该对象的属性。

您的问题太抽象,无法知道解决此问题的确切方法对您的应用程序有意义,但这是一般(和抽象的)想法笨蛋在这里 http://plnkr.co/edit/ZvodQUzI5pdfhldtRINM?p=preview:

.factory('promiseService', function($q){
  return {
    someDeferredThing: function(){
      var placeholder = {};
      var d = $q.defer();
      d.promise.then(function(text){
        placeholder.text = text;
      });
      d.resolve("hi");
      return placeholder;
    }
  }
)

该服务返回一个由承诺更新的对象,并且not本身就是一个承诺。如果你返回一个承诺,那么你必须处理.then()等等来获取值。

.controller('appCtrl', function($scope, promiseService){
  $scope.deferredResult = promiseService.someDeferredThing();
});

这就是将值分配给范围的方式。

$scope.deferredResult.text在承诺解决之前将是未定义的,然后它将被定义并解决"text"。因此,您的视图应该在短时间内处理未定义的状态 - 通常很简单ng-show.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS 承诺返回空对象 的相关文章

随机推荐