[javascript] promise 用法
Es6有个非常好用的特性就是Promise,它是异步编程的一个解决方案,主要用来解决回调地狱。异步编程通常能获得更好的性能和更大的灵活性。异步的最大特点是无需等待。
什么情况下会使用Promise:一般情况下是有异步操作时,会对Promise进行封装。
首先用setTimeout模拟异步网络请求,接口数据在then()函数内处理
new Promise(resolve,reject)默认resolve,reject传入两个参数,这两个是Promise自带的函数对象。
从字面意思上来看就知道这两个对象的具体作用
resolve——成功:接口请求成功
reject ——拒绝:接口请求失败
三种状态
1.pending :等待状态,比如正在进行网络请求,或者定时器没有到时间的时候。
2.fulfil: 满足状态,当我们主动回调了resolve()时,接口调用成功,就处于该状态,并且会回调.then()
3.rejcet: 拒绝状态,当我们主动回调了reject()时,接口调用失败,就处于该状态,并且会回调.catch()
new Promise((resolve,reject)=>{ // 第一次网络请求 setTimeout(()=>{ resolve() //调用成功函数 reject('error message') //调用失败 },1000) }).then(()=>{ //调用成功后 console.log('第一次调用成功') }) }).catch((err)=>{ //调用失败后抓住错误信息 console.log(err) //error message })
这样的一个then().catch()就是简单的链式调用
还有省略.catch()写法 ,then()传入两个函数对象,第一个函数对象内写请求成功函数,第二个函数对象内写请求失败函数。
new Promise((resolve,reject)=>{ // 第一次网络请求 setTimeout(()=>{ resolve('调用成功') reject('error message') },1000) }).then(data=>{ //请求成功 console.log(data) //调用成功 },err=>{ //请求失败 console.log(err) //error message })
Example:
// 在上面代码中 是实现了new出一个对象 定义了个常量来接收了 不用常量接收直接使用时 const num = 2; new Promise((r,e) => { // r(resolve) e(reject) // 异步逻辑代码 num === 1 ? r(num) : e(num) // 同一个逻辑中只能执行一种状态方式 }).then(res => { console.log(`num为1时被调用,num为:${res}`) }).catch(err => { console.log(`num为2时被调用,num为:${err}`) })
1.01^365=37.78
0.99^365=0.03
浙公网安备 33010602011771号