在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 相关文章推荐
参考:关于Javascript中实现暂停的几篇文章
Mar 04 Javascript
翻译整理的jQuery使用查询手册
Mar 07 Javascript
点图片上一页下一页翻页效果
Jul 09 Javascript
JavaScript 保存数组到Cookie的代码
Apr 14 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
浅谈Vue数据绑定的原理
Jan 08 Javascript
Vue.js添加组件操作示例
Jun 13 Javascript
vue项目上传Github预览的实现示例
Nov 06 Javascript
详解Vue中组件传值的多重实现方式
Aug 16 Javascript
JS数组属性去重并校验重复数据
Jan 10 Javascript
Javascript如何递归遍历本地文件夹
Aug 06 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 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
php xml 入门学习资料
2011/01/01 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
php中session与cookie的比较
2015/01/27 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
JQuery 风格的HTML文本转义
2009/07/01 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
基于pip install django失败时的解决方法
2018/06/12 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
男方父母婚礼答谢词
2014/01/25 职场文书
初三政治教学反思
2014/01/30 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
综合实践活动报告
2015/02/05 职场文书
Jsonp劫持学习
2021/04/01 PHP
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
Node与Python 双向通信的实现代码
2021/07/16 Javascript
Go语言读取txt文档的操作方法
2022/01/22 Golang
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技