当前位置: 代码网 > it编程>编程语言>Javascript > JS多次请求接口按顺序依次执行解决办法

JS多次请求接口按顺序依次执行解决办法

2024年05月28日 Javascript 我要评论
需求:在开发中需要同时请求多个接口,但是需要请求按顺序执行。比如先拿到接口a的返回值shopid,作为接口b的请求参数再调接口拿到仓库列表。解决办法:将接口a封装在promise中,在调用promis

需求:在开发中需要同时请求多个接口,但是需要请求按顺序执行。比如先拿到接口a的返回值shopid,作为接口b的请求参数再调接口拿到仓库列表。

解决办法: 将接口a封装在promise中,在调用promise前加上await,await会等待promise中执行完resolve时,才会再进行下一步操作。

// 1、获取用户列表,将第一位用户的门店设置为当前门店
getusers() {
  return new promise((resolve, reject) => {
    let data = {
      limit: 999,
      page: 1,
      roleids: "1,2",
      bindstatus: 0,
    };
    getbuyuserlist(data)
      .then((res) => {
        this.userlist = res.list;
        if (!this.form.buyid) {
          this.form.buyuserid = res.list[0].userid;
          this.form.shopid = res.list[0].shopid;
        }
        // promise封装的接口里面可以没有return,但是一定要调用 resolve 函数,表明异步任务顺利完成且返回结果值
        resolve();
      })
      .catch((error) => {
        reject(error);
      });
  });
},
///2、设置仓库的默认项
setdefaultselection() {
  let data = {
    page: 1,
    limit: 10,
    shopid: this.form.shopid,  //只筛选当前门店关联的仓库
  };
  getwarehouselist(data).then((res) => {
    this.warehouselist = res.list;
    if (!this.form.buyid) {
      this.form.warehouseid = this.warehouselist[0].warehouseid;
      this.form.warehousename = this.warehouselist[0].name;
    }
  });
},
// vue实例被创建后立即调用接口获取筛选项数据
async created() {
    await this.getusers();
    this.setdefaultselection();
}

promise对象

简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果

promise 是一个对象,promise 提供统一的 api,各种异步操作都可以用同样的方法进行处理。axios 的内部实现原理就是通过 promise 实现的。

promise对象的两个特点

  • 对象的状态不受外界影响。有三种状态:pending(进行中)、fulfilled(成功)和rejected(失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。promise对象的状态改变,只有两种可能:从pending变为resolved和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果

promise对象是一个构造函数,用来生成promise实例,带有一个回调函数,回调函数的两个参数是 resolve(成功) 和 reject(失败),这两个参数他们也是函数。

链式调用then方法

then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数,它们都是可选的。

但是规范化的写法是调用then和catch方法。

let p = promise.resolve("foo");
// 等价于
let p = new promise((resolve) => {
  resolve("foo");
});

p.then((data) => {
  console.log(data); //输出'foo'
});


var p2 = new promise(function (resolve, reject) {
  var flag = false;
  if(flag){
    resolve('这是数据2');
  }else{
    reject('这是数据2');
  }
});

p2.then(function(data){//状态为fulfilled时执行
  console.log(data);
  console.log('这是成功操作');
},function(reason){ //状态为rejected时执行
  console.log(reason);
  console.log('这是失败的操作');
});

总结 

到此这篇关于js多次请求接口按顺序依次执行解决办法的文章就介绍到这了,更多相关js多次请求接口按顺序执行内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com