web前端:关于angularjs异步操作后台请求时,用$q.all排列先后顺序的问题

    作者:斩月飞仙更新于: 2020-03-13 22:28:32

    Web开发

      AngularJS诞生于2009年,由MiskoHevery等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC(Model–view–controller)、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。

      最近我在做angularjs程序时遇到了一个问题

      1.页面有很多选择框,一个选择框里面有众多的选择项,和一个默认选定的项,像下面这样(很多选择框,不只一个):

    web前端:关于angularjs异步操作后台请求时,用$q.all排列先后顺序的问题_angularjs_自动化_异步_课课家

      2.众多的选项要从后台接口得到,默认项从另一个后台接口得到,这就需要$promise.then()操作

      3.而多个$promise.then()属于异步操作,先后顺序不是一定的,如果先得到众多选项,后得到默认值,显示就没有问题,如果顺序颠倒,默认项就会为空,这不是我想要的

      4.这就需要众多选项的后台请求都获得完,才去后台请求默认值,

      就用$q.all方法

      letlist=$q.all({//多个后台请求,部分先后顺序

      url1:getUrl1().$promise,

      url2:getUrl2().$promise,

      url3:getUrl3().$promise,

      });

      $scope.list.then(function(result){

      //三个后台请求结果

      result.url1

      result.url2

      result.url3

      }).finally(function(){//finally的优点:1.无论成功失败都会执行2.前面三个请求结束后才会执行

      //最后一个后台请求

      //TODO

      });

      补充:当然还有then().then().then()......这种方法,就把请求顺序执行了,不过select众多选项的后台请求不需要先后顺序,只是默认项需要最后执行,我就选择$q.all这种方法了

      AngularJS是为了克服html在构建应用上的不足而设计的。HTML是一门很好的为静态文本展示设计的声明式语言,但要构建web应用的话它就显得乏力了。所以我做了一些工作(你也可以觉得是小花招)来让浏览器做我想要的事。

课课家教育

未登录

1