编辑:从角度 v1.2开始,默认情况下未激活视图中的承诺分辨率。
视图中 promise 的自动解析起初看起来像是一个方便的工具,但它有许多限制需要仔细理解和评估。这种方法最大的问题是 AngularJS 会为 promise 添加回调,而我们几乎无法控制它。
回答您的问题:
1) 如前所述,最终将由 AngularJS 添加成功/错误回调,因此我们在这里没有太多控制权。您可以做的是将原始承诺包装成一个跟踪解决方案的自定义承诺。但是这种灵巧的整体目的是节省很少的击键。不,没有像“解决”这样的事情。简而言之 - 没有适用于所有承诺的通用机制来跟踪进度。如果您的承诺是$http
基于 - 的,您可能会使用拦截器或pendingRequests
属性来跟踪正在进行的请求。
2)你不能。再一次,AngularJS 在$parse
服务中添加了一个处理程序,它看起来像这样:(请参阅此处promise.then(function(val) { promise.$$v = val; });
的代码)。您可以看到只添加了一个成功回调,因此所有失败都将被忽略。
这些并不是视图中自动承诺解决方案的唯一限制。另一个问题是函数返回的 Promise 无法正确解析。例如,如果您要像这样重写一个示例:
myModule.controller('HelloCtrl', function($scope, HelloWorld) {
$scope.messages = function() {
return HelloWorld.getMessages();
}
});
并尝试使用以下标记:
<li ng-repeat="message in messages()"></li>
事情会按预期进行,这可能会让人感到意外。
简而言之:虽然 Promise 的自动解析似乎是一个方便的捷径,但它有许多限制和不明显的行为。仔细评估这些并决定是否值得节省一些击键。