Promise

promise是以同步的形式来执行异步代码的回调函数

let myPromise = new Promise(function (resolve, reject){
    setTimeOut(()=> {
        resolve(data)或者reject(data)
    })
})
.then(onFulfilled, onRejected)
.catch(onRejected)

myPromise.then(onFulfilled, onRejected)

myPromise.catch(onRejected)

1. promise 是⼀个有then⽅法的对象或者是函数, ⾏为遵循本规范

2. thenable 是⼀个有then⽅法的对象或者是函数

3. value 是promise状态成功时的值, 也就是resolve的参数, 包括各种合法的值, 包括undefined, thenable, promise, 个人习惯用res标识这个值

4. reason 是promise状态失败时的值, 也就是reject的参数, 表示拒绝的原因, 个人习惯用rej标识这个值

5. exception 是⼀个使⽤throw抛出的异常值

onFulfilled

promise失败的回调必须是一个函数否则它会被忽略不执行

它不能被执行多次

它不能在promise实现之前调用 只能在promise的状态被重置为fulfilled后调用执行

onRejected

promise失败的回调必须是一个函数否则它会被忽略不执行

它不能被执行多次

它不能在promise实现之前调用 只能在promise的状态被重置为rejected后调用执行

Promise存在三种状态

  1. pendding 待定
    1. 等待待定的初始状态, 可变更状态
    2. 可以通过resolve(value)变更为(成功fulfilled)的状态并向下传递一个参数value,
    3. 可以通过rejece(reason)变更为rejected(失败rejected)的状态同样向下传递一个参数reason
  2. fulfilled 成功
    1. promise的最终标识为成功的状态, 此状态以后promise不可再变更.
    2. 可以通过.then(value=> {的第一个回调获取成功的状态并执行此回调! 且value为resolve传递的value数据})
    3. resolve的参数value不能为空 否则then接收的value会为undefined
  3. rejected 失败
    1. promise的最终标识为失败的状态, 此状态以后promise不可再变更.
    2. 可以通过.catch(reason => {获取成功的状态并执行此回调! 且reason为rejece传递的reason数据})
    3. reject的参数reason不能为空 否则catch接收的reason会为undefined

promise的链式方法

  1. .then()
  1. 可以接收构造函数中处理的状态变化, 并分别对应执行.
  2. then方法有2个参数, 第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行.
  3. then方法的执行结果也会默认返回一个参数为undefined的Promise对象. 因此我们可以进行then的链式执行, 且会将then中return的值作为参数传递如果return为一个新的Promise.resolve()或Promise.reject()则会向下传递一个新的状态和参数
  4. 第二个参数不会接收第一个个参数中返回的失败的状态执行, 也就是说.then(onFulfilled, onRejected)onFulfilled 和 onRejected只能执行一个

使用方式:

function myPromise (num) {

    return new Promise(function (resolve, reject){

        if(num <= 0){

            resolve('num小于等于0');

        } else {

            reject('num大于0');

        }

    })

}

myPromise(0)

.then((res) => {

    console.log('1', res); // num小于等于0

    return `我来自then1`;

}, (rej) => {

    console.log('2', rej);

})

.then((res) => {

    console.log('3', res); // 我来自then1

    return Promise.reject(`我来自then3`);

}, (rej) => {

    console.log('4', rej);

})

.then((res) => {

    console.log('5', res);

}, (rej) => {

    console.log('6', rej); // 我来自then3

})

  1. .catch()
  1. 和then大致相同 相等于.then(null, function(){})
  1. .finally()
  1. finally方法用来指定在 promise 结束时, 无论结果是 fulfilled 或者是 rejected, 都会执行的回调函数. 这样可以避免同样的语句需要在then()和catch() 中都要写一次的情况比如去掉加载动画
  2. finally 方法的回调函数不接受任何参数, 这意味着没有办法知道前面的 Promise状态到底是fulfilled还是rejected
  3. finally 方法本身无异常抛出的情况下, 会返回原来的 Promise 对象值. 若抛出异常, 则返回异常的 Promise 对象

参考地址:   Promises/A+

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值