异步Promise、Promise.all、Promise.race

Promise

Promise是ES6提供的类,为了处理复杂的异步任务的。

状态

Promise有pendingfulfilledrejected 三个状态,状态转变不可逆。
pending: 初始状态
fulfilled: 成功状态
rejected: 失败状态

构建

我们可以通过new Promise((resolve,reject) => {})构建一个Promise对象。
Promise的构造函数接收一个函数作为参数, 函数是同步执行的,称为起始函数,起始函数包含两个参数resolve、reject,分别代表 Promise 成功和失败的状态。

API
then()

then 是Promise成功、失败的回调函数;
第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数;

catch()

catch是Promise失败的回调函数;

finally()

finally是无论成功失败,都会执行的回调函数。

const promise = new Promise((resolve,reject) => {
  if(Math.random() < 0.5) {
  	// 调用 resolve 函数传递 成功参数
    resolve('success')
  } else {
  	// 调用 reject 函数传递 失败参数
    reject('fail')  
  }
})

promise.then(r=>{
	// then 接收 Promise resolve 成功的回调参数
	console.log(r)
}).catch(error=>{
	// catch 接收 Promise reject 失败的回调参数
	console.log(error)
}).finally(()=>{
	// 最后执行的参数, 注意没有入参
	console.log('End')
})

all()

将多个Promise实例包装成一个新的Promise实例。

Promise.all([promise1, promise2, promise3]).then(r=>{
	// 都成功会返回一个对应的数组 [promise1返回值,promise2返回值,promise3返回值]
}).catch(e=>{
	// 只要有一个失败 就会返回 对应失败的返回值
})

只有当promise1、promise2、promise3 的状态都变成成功了,Promise.all的状态才会变成成功。返回的是一个数组,返回的数组只和传入的顺序有关,和那个先返回成功无关。
当其中有一个返回失败,Promise.all 就直接返回失败,有多个失败返回,只会返回先传入的那个。

race()

Promise.race([p1, p2, p3]) 那个先返回就返回那个结果,不论是成功还是失败。

allSettled()

Promise.allSettled([p1, p2, p3]) 返回一个新的Promise实例,不管成功还是失败,返回所有的结果。
[{status: 'rejected', reason: '1'}, {status: 'fulfilled', value: 2}]

async函数

async/await 是用来处理异步的方式,解决了异步调用嵌套地狱的问题。
async声明方法是异步,await等待一个异步方法执行结束

async function getSome() {
	let res = await asyncFun()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值