promise的一些特点

本文深入讲解Promise的工作原理,包括状态转换、链式调用、错误处理及异步操作。通过实例解析resolve、reject如何影响then、catch的执行,探讨值穿透、同步与异步的区别,以及如何正确使用return进行值传递。

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
})
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值