加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在AngularJS视图中使用Promise

发布时间:2020-12-17 08:53:30 所属栏目:安全 来源:网络整理
导读:Mark Dalgleish写了一篇关于如何在AngularJS视图中使用promises的 nice little article. 有些人在评论中询问了这个问题,但马克没有回答(尚).因为我问我同样的问题,我会在StackOverflow上询问以获得答案: 如果在视图中使用promises,如何处理“加载”/“等待
Mark Dalgleish写了一篇关于如何在AngularJS视图中使用promises的 nice little article.
有些人在评论中询问了这个问题,但马克没有回答(尚).因为我问我同样的问题,我会在StackOverflow上询问以获得答案:

>如果在视图中使用promises,如何处理“加载”/“等待”指示,因为它们是异步的?承诺是否具有“已??解决”或“内部请求”属性?
>我如何处理错误?通常它们会出现在第二个回调中,但是如果我在视图中直接使用promise,我就不会处理这种情况.还有另外一种方法吗?

谢谢.

编辑:从角度v1.2到 resolution of promise in views is not activated by default.

视图中的promises自动解决方案起初看起来像一个方便的工具,但它有许多需要仔细理解和评估的限制.这种方法最大的问题是AngularJS会为一个承诺添加回调,而我们几乎无法控制它.

回答你的问题:

1)如上所述,最终AngularJS将添加成功/错误回调,因此我们在这里没有太多控制权.你可以做的是将原始承诺包装成一个跟踪分辨率的自定义承诺.但这种方法可以解决保存少量键击的全部目的.不,没有“解决”之类的东西.简而言之 – 没有通用的机制可以跟踪适用于所有承诺的进展.如果您的承诺是基于$http的,您可以使用拦截器或pendingRequests属性来跟踪正在进行的请求.

2)你不能.再一次,AngularJS在$parse服务中添加了一个处理程序,它看起来像这样:promise.then(function(val){promise.$$v = val;}); (见代码here).您可以看到只添加了成功回调,因此将无声地忽略所有失败.

这些不是视图中自动承诺解析的唯一限制.另一个问题是函数返回的promise将无法正确解析.例如,如果您要重写这样的示例:

myModule.controller('HelloCtrl',function($scope,HelloWorld) {

  $scope.messages = function() {
    return HelloWorld.getMessages();
  }
});

并尝试使用以下标记:

<li ng-repeat="message in messages()"></li>

事情会像预期的那样奏效,这可能会让人感到惊讶.

简而言之:虽然承诺的自动解决可能看起来像一个方便的捷径,但它有许多限制和非显而易见的行为.仔细评估这些并确定是否值得保存几次击键.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读