js promise 基本使用方法

Promise就是一个类

1、promise三种状态 pending fulfilled rejected

// promise 的特点以及概念
// https://promisesaplus.com/ promisea+ 规范 都通过这个规范来实现的

// promise es6 内部已经实现了。 ie以下不支持promise,通过mdn,can i use 可以查询到浏览器支持情况 需要polyfill  es6-promise


// promise 为什么会产生  解决异步问题

// 1.多个异步请求并发 (希望同步最终的结果) Promise.all
// 2.链式异步请求的问题 上一个人的输出是下一个人的输入,形成恶魔金字塔  Promise的链式调用可以解决这个问题
// 3.缺陷:还是基于回调的

// 1.promise 有三个状态:成功态(会调用resolve) 失败态(会调用reject) 等待态(pending)(又不成功又不失败)
// promise就是一个类

let promise = new Promise((reso,reje) => {

})
console.log(promise)

let promise = new Promise((reso,reje) => {
    reso('发工资')
})
console.log(promise)

let promise = new Promise((reso,reje) => {
    reje('没发工资')
})
console.log(promise)

 

2、用户自己决定失败的原因和成功的原因 成功和失败也是用户定义的

3、promise 默认执行器是立即执行

let promise = new Promise((reso,reje) => {
    console.log(1)
})
console.log(2)

4、promise的实例都拥有一个then方法

let promise = new Promise((reso,reje) => {
    reso('成功')
})

promise.then((data)=>{
    console.log('success',data)
},(err)=>{
    console.log('failed',err)
})

5、如果执行函数时发生了异常也会执行失败逻辑

let promise = new Promise((reso,reje) => {
    throw new Error('失败了')
})

promise.then((data)=>{
    console.log('success',data)
},(err)=>{
    console.log('failed',err)
})

6、如果promise一旦成功就不能失败,反过来也一样

let promise = new Promise((reso,reje) => {
    throw new Error('失败了')
    reso('成功')
})

promise.then((data)=>{
    console.log('success',data)
},(err)=>{
    console.log('failed',err)
})

7、promise 成功和失败的回调的返回值 可以传递到外层的下一个then

8、如果返回的是普通值的话 (传递到下一次的成功中,不是错误不是promise就是普通值) ,出错的情况(一定会走到下一次的失败),可能还要promise的情况(会采用promise的状态,决定走下一次的成功还是失败 )

9、错误处理 如果离自己最近的then 没有错误处理(没有写错误函数) 会向下找,如果又错误处理函数则执行错误处理函数,然后根据第八条决定走下一个then的成功或失败,没有返回值就相当于返回undefined

10、每次执行完promise.then方法后返回的都是一个“新的promise" (promisey一旦成功或者失败就不能修改状态)

11、值穿透

let p = new Promise((resolve,reject)=>{
    resolve(1)
})

p.then().then().then(data=>{
    console.log(data)
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值