2

出于某种原因,当我$q从作用域函数返回一个承诺时,该值永远不会在解析时传播:

app.controller('MainCtrl', function($scope, $q) {
    var deferred = $q.defer();
    deferred.resolve("hello");
    var promise = deferred.promise;

    $scope.promiseReturn = function() {
        return promise;
    };
});

和观点:

<body ng-controller="MainCtrl">
    <p>promiseReturn: {{promiseReturn()}}</p>
</body>

这是此代码的 Plunker。视图最终看起来像:

promiseReturn: {}

我的理解似乎是模板引擎会$q相当透明地处理承诺。

4

1 回答 1

4

$qPromise 可以直接附加到作用域,当被解析时,它们的值将导致视图被更新(并且它们的解析值将被使用),但它们不能是作用域函数的返回值

如果您从作用域上的函数返回一个 Promise,则返回值将按原样使用。Promise 看起来像一个 object {then: function() { ... }},Angular 的 JSON 序列化器会忽略具有函数值的键,因此您只需进入{}视图即可。这是一个 Plunker 演示这个

Angular 在几个地方处理这个问题;你可以在parse.js中看到一些(搜索.then)。

于 2013-03-18T23:02:35.560 回答