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);
      });
    },
目录
相关文章
|
1天前
|
前端开发 JavaScript 数据库连接
掌握 JavaScript 异步编程:从回调到 Async/Await
在现代 JavaScript 开发中,异步编程是处理非阻塞操作的关键技术。本文从早期的回调函数讲起,逐步过渡到 Promise 和 ES2017 的 async/await 语法,展示了异步编程如何变得更加简洁和强大。通过实用的技巧和最佳实践,帮助开发者避免常见陷阱,提升代码效率和可靠性。
|
3天前
|
JavaScript
网站内容禁止复制的js代码
网站内容禁止复制的js代码
|
9天前
|
缓存 JavaScript 前端开发
js和html代码一定要分离吗
JavaScript(JS)和HTML代码的分离虽非绝对必要,但通常被推荐
|
10天前
|
JavaScript 前端开发
一个js里可以有多少个async function,如何用最少的async function实现多个异步操作
在 JavaScript 中,可以通过多种方法实现多个异步操作并减少 `async` 函数的数量。
|
12天前
|
移动开发 JavaScript 安全
总有一款适合您分享78个JS相册代码
本文分享了78款JS相册代码,包括3D相册旋转木马、图片悬浮效果、倾斜图片幻灯片切换等特效,适用于各种图片展示场景。无论您需要哪种样式,都能在这里找到满意的解决方案。快来挑选吧!参考链接:[点击这里](https://www.vipwb.com/sitemap.xml)。
23 4
|
13天前
|
JavaScript
分享一款520表白节JS代码
今天给大家分享一款JS表白源码 js会随 随机颜色心形跟随鼠标互动520表白节女神表白利器! 修改的话就搜索:LOVEh 就能找到这个英文了。
8 0
分享一款520表白节JS代码
|
18天前
|
Web App开发 JavaScript 前端开发
JavaScript基础知识-使用Firefox进行代码的调试(Debug)
关于如何使用Firefox浏览器进行JavaScript代码调试的基础知识介绍。
29 0
|
JavaScript 前端开发 Windows
一个用js写的接口http调试程序
公司有很多手机app的项目,手机app又要经常访问后台提交与查询数据。所以前端app与后台的开发与测试过程中接口调试是一个经常要做的工作。
878 0
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
70 2
|
2月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的宠物援助平台附带文章源码部署视频讲解等
63 4