保钠

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

页面加载时通常请求一次就可以拿到数据,但有时候会遇到需要请求多次。

情景1:请求1下包含请求2,3等多个请求      

情景2:for循环请求数据

情景1有一种情况就是请求1下的请求还没结束,就已经执行完成,就导致请求2,3返回的数据为空。

情景2有一种情况就是请求还没完成,for循环已经结束。

基于上述情景会出现的问题,引入Promise.all

Promise.all()基于ES6 ,解释是可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。

实例代码如下:

Promise.all(’数组/集合/等等‘).then((value) => {
       value.forEach(function (result) {
       vm.$http.get(‘请求地址’).then(
         function (data) {

        ---方法体1
             vm.$http.get(`${vm.javaUrl}${result.crmId}`).then(
             function (data) {
                -- 方法体2
             }

         },);});

白话文就是说: 在forEach循环的过程中只要有一个请求失败,整个结果集就会立即抛出错误,并且reject的是第一个抛出的错误信息。(要么失败要么成功)

即便在循环工程中,前面元素请求结果的时间比后面元素长,也不会影响其他元素的结果集。

问题解决。

拓展:Promise.race这个特性就是哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。

 

矮大紧老湿说,生活不仅是眼前的苟且,还有诗和远方的美好值得去追寻。

伤感的人啊,日子还是要向前。时间可以淡化很多美好,但最纯真的情感和回忆永远会留在心底,并激励自己勇敢前行。

~Back To December~ 

 

posted on 2021-02-09 18:09  保钠  阅读(309)  评论(0编辑  收藏  举报