关于我所知道的promise用法

1、promise是用来解决异步的一个对象
第一,reject是用来抛出异常的,catch是用来处理异常的;
第二:reject是Promise的方法,而then和catch是Promise实例的方法(Promise.prototype.then 和 Promise.prototype.catch)。
三种状态:pending(初始化)、fulfilled(成功)、rejected(失败)
2、promise的then和catch属于微任务
链式调用原因

promise.then(res => {
	// return promise
}, error => {
	// return promise
}).catch(error => {
	// return promise
})

3、关于promise的error
(1)如果promise内部reject或者throw一个错误,then的第二个参数error回调存在的话就会执行,不走catch,不存在就会直接走catch

例:let mypromise = new Promise((resolve, reject) => {
reject('error')throw new Error(‘抛出错误')
})
第一种:mypromise.then(res => {}, error => {
// 这里执行
}).catch(error => {// 这不执行})
第二种:mypromise.then(res => {}).catch(error => { // 这里执行 })

(2)如果promise.then()抛出错误,那么只有catch能捕捉到,then的第二个参数error捕捉不到

const mypromise = new Promise((resolve, reject) => {
      resolve()
  })
  mypromise.then(res => {
      throw new Error('then抛出错误')
  }, error => {
      console.log(111, error)
  }).catch(error => {
      console.log(222, error) // 执行
  })

4、promise的几种用法
(1)promise.all
处理多个promise实例,数组形式
promise.all([promise1, promise2]).then().catch
必须两个都成功才会走then,只要有一个reject了就会走catch

例:const fun1 = new Promise((resolve, reject) =>{
	resolve('成功')
})
const fun2 = new Promise((resolve, reject) => {
	reject(‘失败')
})
promise.all([fun1, fun2]).then(res => {
	// fun1和fun2都为resolve的时候打印结果
	// res['结果1', '结果2']
}, error => {
	// 这个回调存在且执行
}).catch(error => {
	// 否则走这里
})

(2)promise.race
用法同promise.all
区别在于:多个promise实例哪个执行的快就返回哪个,不管本身是成功还是失败状态

const fun1 = new Promise((resolve, reject) => {
	setTimeout(() => { resolve('成功’) }, 1000)
})
const fun2 = new Promise((resolve, reject) => {
	setTimeout(() => { resolve('成功111) }, 300)
})
promise.race([fun1, fun2]).then(res => {
	// res 为 成功111
}).catch(error => {})

(4)promise.allsettled
多个promise实例全部执行完成后,不管成功或失败都会返回,返回一个数组,各个promise实例的状态和结果

const promise1 = Promise.resolve(10)
const promise2 = new Promise((resolve, reject) =>{
setTimeout(() => {
reject(‘失败了')
}, 2000)
})
Promise.allsettled([promise1, promise2]).then(res => {
	// res为一个数组,具体见图
})

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值