promise、async和await

讲的太精辟了,点击查看原文连接
使用场景:菜单列表的加载、联动目录的加载(二级目录的展示需要依赖一级目录)

promise的2个参数(resolve,reject) 和 3个状态(pending ,fulfilled/resolved,rejected)
Promise是一个构造函数,使用new Promise()得到一个实例,new Promise()需要传进去一个函数,这个函数有2个参数:

一个是resolve回调函数,在异步操作成功时调用,把promise的状态从pending转变到fulfilled(又称resolved),并将异步操作的结果,作为参数传递出去
一个是reject回调函数,在异步操作失败时调用,把Promise的状态从从 pending 变为 rejected,并将异步操作报出的错误,作为参数传递出去

点击查看视频链接

比如这样的场景,调用promise1 , 使用promise1的返回结果去调用promise2,然后使用两者的结果去调用promise3

const maskRequest = () =>{
	return promise1().then(res1=>{
		return promise2(res1).then(res2=>{
			return promise3(res1,res2)
		})
	})
}

const maskRrequest =  async()=>{
	const res1 = await promise1()
	const res2 = await promoise2(res1)
	return await promise( res1 , res2 )
	
}

调试:async/await让代码调试变得简单。2个理由使得promise调试很痛苦
1、promise不能在返回表达式的箭头函数中设置断点
2、如果你在.then代码块中设置断点,进入下一步的话,调试器不会跳到下一个.then,因为他只会跳过异步代码。
3、使用async/await时,不在需要那么多的箭头函数,这样调试就像调试同步代码一样。

const fun = async () => {
  return 'hello';
};
fun().then(result => console.log(result))  // hello


const fun1 = new Promise((resolve)=>{
    console.log(6666)
    setTimeout(()=>{
    	resolve(9999)
    },2000)
})
fun1.then(result => console.log(result))  // 6666 两秒后打印 999
var arr = [];
 new Promise(resolve => {
   res.data.map((item, index) => {
   arr[index] = {
	     ...item,
	     icon: `icon${index + 8}.png`,
	   };
	 });
 resolve();
 }).then(()=>{
   this.nav = arr;
 })

在这里插入图片描述
跟promise对象
在这里插入图片描述
跟普通值
在这里插入图片描述
异步函数
在这里插入图片描述
捕获异常
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值