【ES6】一个页面上需要等两个或多个ajax的数据请求成功以后才正常显示(使用Promise.all和Promise.race)

【ES6】一个页面上需要等两个或多个ajax的数据请求成功以后才正常显示(使用Promise.all和Promise.race)

Pomise

Pomise.all

  • Promise.all将多个Promise实例聚合成一个新的Promise实例。请求成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败的值(即如果有一个Pomise失败,则整个Pomise都返回失败)。
  • Promise.all获得的成功结果数组里的数据顺序和Promise.all接收到的数组顺序是一致的,即使Promise1的结果获取的比Promise2要晚。

具体代码如下

javascript 复制代码
<template>
  <div id="app"></div>
</template>
<script>
import { getuser, getlist, getdetail } from "@/api/api";
export default {
  name: "App",
  data() {
    return {};
  },
  mounted() {
    this.getData();
  },
  methods: {
    //获取后端数据
    async getData() {
      let Promise1 = await getuser(); //调用成功
      let Promise2 = await getlist(); //调用成功
      let Promise3 = await getdetail(); //调用失败
      let Promise4 = await getdetail(); //调用失败
      Promise.all([Promise1, Promise2])
        .then((result) => {
          console.log(result); //[[用户信息], [用户列表]]
        })
        .catch((error) => console.log(`Error in promises ${error}`));

      Promise.all([Promise1, Promise2, Promise3, Promise4])
        .then((result) => {
          console.log(result); //调用失败。返回Promise3错误信息
        })
        .catch((error) => console.log(`Error in promises ${error}`));
    },
  },
};
</script>

Promise.race

  • Promise.race([Promise1, Promise2, Promise3])里面哪个结果返回得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
相关推荐
weixin_531651811 天前
ES6 Proxy 的基本用法
前端·ecmascript·es6
徐先生 @_@|||2 天前
Spark的DataFrame的Map Task和Reduce Task深入理解
ajax·spark·php
前端 贾公子3 天前
npm库的打包原理与实践详解 (下)
前端·javascript·node.js·github·es6
渣渣盟3 天前
ES6包装类型静态方法扩展
前端·javascript·es6
gaolei_eit4 天前
Vue3项目ES6转ES5,兼容低版本的硬件设备,React也
javascript·react.js·es6
一位搞嵌入式的 genius4 天前
从 ES6 到 ESNext:JavaScript 现代语法全解析(含编译工具与实战)
前端·javascript·ecmascript·es6
爱敲代码的小鱼5 天前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
董世昌416 天前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
vistaup6 天前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
徐小夕@趣谈前端7 天前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6