ES6 Promise对象

const promise = new Promise((resolve, reject) => {
    let result = dosomething();
    if (result) {
        resolve('successMsg');
    } else {
        reject('errorMsg');
    }
})

//方法1(推荐)
promise
    .then(msg => console.log(msg))
    .catch(err => console.log(err)
    .finally(() => console.log('finally done'))


//方法2
promise.then(
    msg => console.log(msg),
    err => console.log(err)
).finally(() => console.log('finally done'))

Promise.prototype.then()

第一个参数是resolved状态的回调函数(即上面代码中的resolve)

第二个参数是rejected状态的回调函数(即上面代码中的reject)

Promise.prototype.catch() 

相当于Promise.prototype.then(null, reject) 或者 Promise.prototype.then(undefined, reject)

Promise.prototype.finally()

不管Promise最终状态如何都会执行的操作

Promise.all(Array)

接收一个promise数组作为参数,当所有promise都成功时,才进入then操作,否则进入catch操作

Promise.race(Array)

接收一个promise数组作为参数,执行最先改变状态的promise的回调函数

Promise.allSetteled(Array)

接收一个promise数组作为参数,只有所有promise都返回结果,才进入then操作,且只会进入then操作

Promise.any(Array)

好像已经废弃了,浏览器报错:Uncaught TypeError: Promise.any is not a function

function test1(){
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('执行 test1')
            resolve('test1')
        }, 1000)
    })
}
function test2(){
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('执行 test2')
            resolve('test2')
        }, 2000)
    })
}
function test3(){
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('执行 test3')
            resolve('test3')
        }, 3000)
    })
}

Promise.all([test1(), test2(), test3()])
    .then(res => {
        console.log(res)
    })
// 执行 test1
// 执行 test2
// 执行 test3
// (3) ["test1", "test2", "test3"]


Promise.race([test1(), test2(), test3()])
    .then(res => {
        console.log(res)
    })

// 执行 test1
// test1
// 执行 test2
// 执行 test3



// 直接return可以把值传给后面的then
// 直接throw可以把错误传给后面的catch
test1().then(res => {
    console.log(res);
    return '后面的then会接收到这个值'
}).then(res => {
    console.log('then :'+res);
    throw new Error('后面的catch会捕获这个错误')
}).catch(res => {
    console.log('catch :'+res)
})

promise.reject()

返回一个Promise实例,状态为rejected

var p = Promise.reject('123');
console.dir(p)

promise.resolve()

返回一个Promise实例,状态为resolved

var p = Promise.resolve('123');
console.dir(p)

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值