promise的一些特点

15 篇文章 0 订阅
4 篇文章 0 订阅

promise基本概念

//resolve进入then,reject进入catch
new Promise(function (resolve, reject) {
    resolve(123);
}).then(function (res) {
    console.log(res)//123
})

new Promise(function (resolve, reject) {
    reject(456);
}).catch(function (res) {
    console.log(res)//456
})

1.promise状态无法改变

new Promise(function (resolve, reject) {//console.log(123)
    resolve(123);
    reject(456)
}).then(function (res) {
    console.log(res)//123
}).catch(function (err) {
    console.log(err)
})

new Promise(function (resolve, reject) {//console.log(456)
	reject(456);
    resolve(123);
}).then(function (res) {
    console.log(res)
}).catch(function (err) {
    console.log(err)
})

2.如果.then(function (res)) res不是个函数,会发生值穿透,进入下一个then

new Promise(function (resolve, reject) {
    resolve(123);
}).then('asadass2').then(function (res) {
    console.log(res)//123
})

3.promise是个同步.then.catch是个异步

new Promise(function (resolve) {//1,2,456
	resolve(456);
    console.log(1)
}).then(function (res) {
    console.log(res)
})
console.log(2)

4 链式调用then,上一个then的返回值是下一个then接收到的参数,如返回错误,返回reject的promise

//第一个then才能接收到 123 第二个then没有值的,返回undefined ,如果想要第二then有值,
//只能return
new Promise(function (resolve, reject) {
    resolve(123);
}).then(function (res) {
    console.log(res)//123
}).then(function (res) {
    console.log(res)//undefined
})

//正确写法
new Promise(function (resolve, reject) {
    resolve(123);
}).then(function (res) {
    console.log(res)//123
    return 456
}).then(function (res) {
    console.log(res)//456
})

注意:promise内部使用try catch,所以错误信息 (throw new Error(‘err’))抛出错误才会进入catch,如果是(return new Error(‘err’)),则进入catch

5.then的回调里return一个promise进入等待状态,直到return的promise状态改变

new Promise(function (resolve) {
    resolve();
}).then(function (res) {
    return new Promise(function(resolve){
        setTimeout(function(){
            resolve(4)
        },3000)
    })
}).then(function (res) {
    console.log(res)会等到三秒后才会返回4
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值