Promise的笔记

Promise的作用

简单来讲,Promise就是能把ES5的回调写法分离出来,在异步操作执行完成后,用链式调用的方式执行回调函数。它接受两个参数:resolve回调函数和reject回调函数,resolve执行fullfiled状态的回调,reject执行rejected的回调。

链式写法

const getToken = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('token获取执行结束')
            resolve('238232397329732923923923923')
        },1000)
    })
}
const getUser = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('user获取执行结束')
            resolve('小明')
        },1000)
    })
}
const getUserAge = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('age获取执行结束')
            resolve('19岁')
        },1000)
    })
}
// 开始调用
getToken().then(token=>{
    console.log(token)
    return getUser()
}).then(userName=>{
    console.log(userName)
    return getUserAge()
}).then(age=>{
    console.log(age)
})

输出结果:
在这里插入图片描述

reject用法

reject跟resolve的写法一致,用于对rejected状态的回调处理。

const isToSchool = (userAge)=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(userAge>6 && userAge<12){
                resolve('该年龄符合小学阶段入学标准')
            }else{
                reject('该年龄不符合小学阶段入学标准')
            }
            
        },1000)
    })
}
isToSchool(12).then((resolve)=>{
    console.log('resolve:',res)
},(reject)=>{
    console.log('reject:',reject)
})
// 输出如下:
// reject: 该年龄不符合小学阶段入学标准

catch用法

catch和reject(then的第二个参数)有相同的作用,可以用于对rejected状态的回调处理。但是它还有另外一个作用,跟try…catch的catch作用类似,用于捕获代码的异常处理,防止因为报错而卡死。注意:它是对then里面的代码做异常处理。如下:

const isToSchool = (userAge)=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(userAge>6 && userAge<12){
                resolve('该年龄符合小学阶段入学标准')
            }else{
                reject('该年龄不符合小学阶段入学标准')
            }
            
        },1000)
    })
}
isToSchool(7).then((res)=>{
    console.log(user)   // user未声明
    console.log(res)
}).catch((reason)=>{
    console.log('我捕获到了错误:',reason)
})

在这里插入图片描述

all的用法

all方法是用于多个异步并行请求,全部执行结束之后,汇总成数组数据返回给resolve。

const getToken = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('token获取执行结束')
            resolve('238232397329732923923923923')
        },1000)
    })
}
const getUser = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('user获取执行结束')
            resolve('小明')
        },2000)
    })
}
const getUserAge = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('age获取执行结束')
            resolve('19岁')
        },500)
    })
}
Promise.all([getToken(),getUser(),getUserAge()]).then((res)=>{
    console.log('三个函数都执行完毕了',res)
})

在这里插入图片描述

race的用法

race,赛跑。Promise提供这个race,是指谁跑得快就执行谁的回调。如下:

const getToken = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('token获取执行结束')
            resolve('238232397329732923923923923')
        },1000)
    })
}
const getUser = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('user获取执行结束')
            resolve('小明')
        },2000)
    })
}
const getUserAge = ()=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('age获取执行结束')
            resolve('19岁')
        },500)
    })
}
Promise.race([getToken(),getUser(),getUserAge()]).then((res)=>{
    console.log('三个函数都执行完毕了',res)
})

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值