在vue项目中promise解决回调地狱和并发请求的问题


Posted in Javascript onNovember 09, 2020

场景需求:

需要同时请求5个接口

都请求成功后执行下一步操作

解决方法:

定义一个变量i=5,请求成功一个接口,让i?,直到i=0时执行下一个操作,否则不执行

axios.all 并发请求,.then(axios.spread(function(callback1, callback2)){})

promise.all 并发请求,.then(function([callback1, callback2]){})

1、回调地狱:

函数作为参数层层嵌套

代替的为.then的链式操作

2、promise.all并发请求

引入接口

import {getSellerDetail} from '../../api/seller'

import {getMemberCardInfo} from '../../api/pay_online/index'

数据处理

1. 创建一个Promise实例,获取数据

2. 并把数据传递给处理函数resolve和reject

3. promise在声明时就执行了

created(){
  if (this.$route.query.type){
    this.type = this.$route.query.type;
    this.sellerId = this.$route.query.targetId;
    this.initApi()
  }
},
methods: {
  initApi(){
    `// 商户信息`
    let SellerDetailApi = new Promise((resolve, reject) => {
      getSellerDetail(this.sellerId).then( res => {
        resolve(res)  // resolve(res.data)
      }).catch( err => {
        reject(res)
      })
    })
    `// 会员卡信息`
    let MemberCardInfoApi = new Promise((resolve, reject) => {
      getMemberCardInfo(this.sellerId, this.payMoney).then( res => {
        resolve(res) // resolve(res.data)
      }).catch( err => {
        reject(res)
      })
    })
    `// Promise的all方法,等数组中的所有promise对象都完成执行`
    Promise.all([SellerDetailApi, MemberCardInfoApi]).then( res => {
      this.loading = false;
      // 商户信息
      this.detail = res[0].data.detail;
      this.sellerPic = this.detail.picture;
      this.sellerName = this.detail.name;
      this.discount = this.detail.discount;
      // 会员卡信息
      this.cardDetail = res[1].data;
      this.balance = this.cardDetail.balance; //余额
      this.rechargeTip = this.cardDetail.rechargeTip; // 付款金额提示充值
    }).catch( err => {
      console.log(err)
    })
  }
}

3、接口返回:

promise.all中console.log(res) 返回的是数组接口返回

在vue项目中promise解决回调地狱和并发请求的问题

4、注意:

Promise.all 缺陷 如果其中某个任务出现异常(reject),所有任务都会挂掉,Promise直接进入 reject 状态至catch回调。

Promise.allSettled 无论一个任务正常或者异常,都会返回对应的的状态,可以解决上述问题

补充知识:vue项目中Promise同步请求

1.js中定义Promise

export function wxLogin() {
 let pResult = new Promise((resolve, reject) => {
 uni.login({
  provider: 'weixin',
  success: (res) => {
  console.log('login success:', res);
  // return res;
  setTimeout(function() {
   resolve(res);
  }, 3000);
  },
  fail: (err) => {
  console.log('login fail:', err);
  reject(err);
  }
 });
 }).catch(res => {
 console.log(666, res);
 })
 return pResult;
}

2.vue文件中使用

import {login,wxLogin} from '@/common/login.js'
 
  (async () => {
  //获取授权状态
  console.log(1111,"111")
  let aaa = await wxLogin();
  console.log(3333,"3333");
  console.log(4444,aaa);
  })()

以上这篇在vue项目中promise解决回调地狱和并发请求的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的15款幻灯片插件
Apr 10 Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
简单的JS轮播图代码
Jul 18 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
codeMirror插件使用讲解
Jan 16 Javascript
angularjs2中父子组件的数据传递的实例代码
Jul 05 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
Jul 15 Javascript
JavaScript实现串行请求的示例代码
Sep 14 Javascript
vue 中的动态传参和query传参操作
Nov 09 #Javascript
你不知道的SpringBoot与Vue部署解决方案
Nov 09 #Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 #Javascript
原生JavaScript实现五子棋游戏
Nov 09 #Javascript
Nuxt的动态路由和参数校验操作
Nov 09 #Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 #jQuery
JS实现炫酷轮播图
Nov 15 #Javascript
You might like
PHPThumb图片处理实例
2014/05/03 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
Python遍历pandas数据方法总结
2018/02/09 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
Python使用configparser库读取配置文件
2020/02/22 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
机械系大学毕业生推荐信
2013/11/27 职场文书
水电站项目建议书
2014/05/12 职场文书
五一口号
2014/06/19 职场文书
家长会欢迎标语
2014/06/24 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
地陪导游欢迎词
2015/01/26 职场文书
楚门的世界观后感
2015/06/03 职场文书
运动会运动员赞词
2015/07/22 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
青岛市的收音机研制与生产
2022/04/07 无线电