Promise回调地狱

1 篇文章 0 订阅

Promise 是抽象的异步处理对象

语法 它本身就是一个类,也可以说是构造函数

构造函数需要一个 函数作为参数. 这个函数叫做"执行器函数".

​ 1)执行器函数在创建Promise对象时立即执行.

​ 2)Promise对象有状态和值

  • a.pending undefined

  • b.resolved/fulfilled ‘哈哈’ 表示成工

  • c.rejected ‘呜呜’ 表示失败

​ 细节:状态不可逆

let p1 = new Promise((resolve(成功),reject(失败))=>{})

Promise(里面的内容叫做执行器函数)

​ 如果想控制它什么时候执行,可以在外层用一个函数包住它.(这样使代码更加灵活更加可控)

let p1 = new Promise((resolve,reject)=>{
			// console.log('执行器函数会立即执行~')
			setTimeout(()=>{
				console.log('a')
                resolve('哈哈')
				reject('呜呜')
			},3000)
		})

  • then()方法接收两个函数作为参数,

​ 第一个参数是 Promise 执行成功时的回调,

​ 第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用

function p1 () {
			return new Promise((resolve,reject)=>{
				setTimeout(()=>{
					console.log('a')
					resolve()
				},3000)
			})
		}
		
function p2() {
			return new Promise((resolve,reject)=>{
				setTimeout(()=>{
					console.log('a')
					resolve()
				},3000)
			})
		}

function p3(){
			return new Promise((resolve,reject)=>{
				setTimeout(()=>{
					console.log('a')
					resolve()
				},3000)
			})
		}
p1().then(p2).then(p3)

​ 细节:

p1().then(p2()) //这样p2会提前调用.  注意:这里的p2不能写括号
p1().then(p2)   //把p2这个函数当做参数传给then

//这里尽量不要在then()里面使用回调函数的方法
p1().then(()=>{p2()}).then(()=>{p3()})
相当于:p1().then(()=>{p2()};return undefined).then(()=>{p3()})
//这里会出现错误 p2() p3() 会同时执行
  • catch()方法,它可以和 then 的第二个参数一样,用来指定 reject 的回调,另一个作用是,当执行 resolve 的回调(也就是上面 then 中的第一个参数)时,如果抛出异常了(代码出错了),那么也不会报错卡死 js,而是会进到这个 catch 方法中。
  • all()方法,Promise 的 all 方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调, 会把所有异步操作的结果放进一个数组中传给 then。
  • race()方法,race 按字面解释,就是赛跑的意思。race 的用法与 all 一样,只不过 all 是等所有异步操作都执行完毕后才执行 then 回调。而 race 的话只要有一个异步操作执行完毕,就立刻执行 then 回调。
  • 注意:其它没有执行完毕的异步操作仍然会继续执行,而不是停止
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值