js 等待接口访问成功后执行指定代码【3种方法】(含async await Promise的使用)

简介: js 等待接口访问成功后执行指定代码【3种方法】(含async await Promise的使用)

方案1:在.then中执行代码

适用场景:访问接口后,执行的代码固定不变

    getList() {
      this.$http({
        method: "get",
        url: "http://127.0.0.1:4523/mock/430173/user/list",
        params: params,
      }).then((res) => {
        this.dataList = res.data.list;
        // 执行指定代码
        console.log("搜索数据成功!");
      });
    },

缺点:

  1. 目标代码嵌套过深
  2. 访问接口的代码不便于复用

方案2:通过回调函数执行代码

将目标代码作为函数的参数传入

适用场景:访问接口后,不同触发条件需要执行不同的代码

优点:方便接口代码的封装复用

    // 初始化
    init() {
      let initSucInfo = () => {
        console.log("初始化数据成功!");
      };
      this.getList({}, initSucInfo);
    },
    // 搜索
    search() {
      let params = {
        name: "朝阳",
      };

      let searchSucInfo = () => {
        console.log("搜索数据成功!");
      };
      this.getList(params, searchSucInfo);
    },

    // 函数封装——访问接口成功后,执行传入的callBack函数
    getList(params = {}, callBack) {
      this.$http({
        method: "get",
        url: "http://127.0.0.1:4523/mock/430173/user/list",
        params: params,
      }).then((res) => {
        this.dataList = res.data.list;
        if (callBack) {
          // 执行对应的代码
          callBack();
        }
      });
    },

方案3:使用async await Promise

优点:代码流程清晰,也方便接口代码的封装复用

要点:

  1. 使用await 的函数前需加async
  2. await 后需跟一个 Promise 对象(axios请求就是一个Promise 对象),所以范例代码中getList方法必须 return this.$http
  3. 若想await 返回接口获取的数据,需在接口的.then中
return Promise.resolve(res);
 

并定义一个变量,接收await 的返回值

let res = await this.getList(params);

目标代码中不使用接口返回的数据

    // 搜索
    async search() {
      let params = {
        name: "朝阳",
      };

      await this.getList(params);
      // 执行目标代码
      console.log("搜索数据成功!");
    },

    getList(params = {}) {
      return this.$http({
        method: "get",
        url: "http://127.0.0.1:4523/mock/430173/user/list",
        params: params,
      }).then((res) => {
        this.dataList = res.data.list;
        console.log("访问接口成功!");
      });
    },

目标代码中使用接口返回的数据

    // 搜索
    async search() {
      let params = {
        name: "朝阳",
      };

      let res = await this.getList(params);
      // 执行目标代码
      console.log("接口返回的数据为:" + res);
    },

    getList(params = {}) {
      return this.$http({
        method: "get",
        url: "http://127.0.0.1:4523/mock/430173/user/list",
        params: params,
      }).then((res) => {
        this.dataList = res.data.list;
        console.log("访问接口成功!");
        return Promise.resolve(res);
      });
    },
目录
相关文章
|
11天前
|
前端开发 JavaScript 数据库连接
掌握 JavaScript 异步编程:从回调到 Async/Await
在现代 JavaScript 开发中,异步编程是处理非阻塞操作的关键技术。本文从早期的回调函数讲起,逐步过渡到 Promise 和 ES2017 的 async/await 语法,展示了异步编程如何变得更加简洁和强大。通过实用的技巧和最佳实践,帮助开发者避免常见陷阱,提升代码效率和可靠性。
|
5天前
|
Web App开发 前端开发 JavaScript
js之 Promise | 12-8
js之 Promise | 12-8
|
5天前
|
前端开发 JavaScript
解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
该文章教授了如何使用Promise和async/await来解决异步编程问题,从而避免回调地狱,使代码更加清晰和易于管理。
解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!
|
8天前
|
前端开发 JavaScript
ES6新标准下JS异步编程Promise解读
ES6新标准下JS异步编程Promise解读
18 3
|
29天前
|
JavaScript 前端开发 索引
JavaScript基础知识-数组基于索引访问
关于JavaScript数组基于索引访问的基础知识介绍。
15 1
JavaScript基础知识-数组基于索引访问
|
20天前
|
JavaScript 前端开发
JS中Promise的类式实现写法
JS中Promise的类式实现写法
|
2月前
|
前端开发 JavaScript 小程序
【JS】async、await异常捕获,这样做才完美
本文通过生动的例子说明了在JavaScript中使用async/await时,不捕获异常可能导致的问题,并介绍了三种处理异步调用异常的方法:try-catch、使用Promise的`.catch`以及`await-to-js`插件库。通过这些方法,可以有效避免异常导致的程序中断,提升代码的健壮性和可读性。
31 0
【JS】async、await异常捕获,这样做才完美
|
2月前
|
JSON JavaScript 前端开发
震惊!JS如何悄无声息追踪你的每一步?揭秘页面访问与关闭的超级上报大法,让数据说话,优化体验不再难!
【8月更文挑战第4天】在Web开发中,跟踪用户行为对提升体验与留存至关重要。本文以在线学习平台为例,介绍如何用JavaScript监听页面访问及关闭,并上报数据。通过`window.onload`监测页面加载,记录用户访问;利用`navigator.sendBeacon`在用户离开时发送少量数据至服务器,无需担心请求失败。需注意隐私合规、性能影响及浏览器兼容性。此技术有助于深入理解用户行为,为产品迭代提供依据。
70 8
|
2月前
|
JavaScript 前端开发 API
揭秘Node.js如何轻松访问API:一个示例足以改变你的开发视角!
【8月更文挑战第21天】在现代Web开发中,API是软件间通信的关键。Node.js以其高效性,在API访问上独具优势。本文通过示例展示如何用Node.js访问API。首先确保已安装Node.js,然后使用npm安装`axios`库。创建`api_example.js`文件,并编写代码以访问JSONPlaceholder API获取数据。成功时,响应数据会输出至控制台;若失败,则打印错误。此示例展示了Node.js结合`axios`访问API的便捷性及高效性,为初学者提供快速入门指南。
23 0
|
2月前
|
前端开发 JavaScript
JavaScript——promise 是解决异步问题的方法嘛
JavaScript——promise 是解决异步问题的方法嘛
32 0