页面加载时通常请求一次就可以拿到数据,但有时候会遇到需要请求多次。
情景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~