文章目录
promise简单总结
提示:以下是本篇文章正文内容,下面案例可供参考
1. Promise对象的状态
他是Promise
对象的一个属性,PromiseSate
他的取值有三种:
- pending
- resolved
- rejected
2. Promise对象的值
他是Promise
对象的一个属性,PromiseResult
3. Promise.resolve()
返回一个promise
对象,状态是成功的
const p = Promise.reslove('123')
4. Promise.reject()
返回一个promise
对象,状态是失败的
const p = Promise.reject('123')
5. Promise.all()
参数一个promise
对象组成的数组。返回一个新的promise对象
如果传入的promise
对象中都是成功,则Promise.all(
)返回一个新的成功状态的promise
对象,数据是入参数组中每个promise
对象调用后返回的成功结果组成的数组
如果传入的promise
数据中有失败的,则Promise.all()
返回一个新的失败状态的promise
对象。数据是入参数组中失败的promise
数据返回的结果。如果有多个失败,则只返回第一个失败的promise
对象的结果数据
const p1 = new Promise((resolve, reject)=> {
resolve('ok')
})
const p2 = Promise.resolve('p2')
const p3 = Promise.resolve('p3')
const p4 = Promise.reject('p4')
const p5 = Promise.reject('p5')
const r1 = Promise.all([p1, p2, p3])
const r2 = Promise.all([p1, p2, p4])
const r3 = Promise.all([p1, p4, p5])
console.log(r1)
console.log(r2)
console.log(r3)
6. Promise.race()
参数一个promise
对象成的数组。返回一个新的promise
对象。状态取决于入参中第一个返回结果的promise
对象
返回的是数组中,第一个返回结果的promise
数据的结果。无论成功还是失败,第一个返回的结果,就是Promise.race()
的返回结果
const p1 = new Promise((resolve, reject)=> {
setTimeout(()=> {
resolve('p1')
}, 300)
})
const p2 = new Promise((resolve, reject)=> {
setTimeout(()=> {
resolve('p2')
}, 100)
})
const p3 = new Promise((resolve, reject)=> {
setTimeout(()=> {
resolve('p3')
}, 200)
})
const p4 = new Promise((resolve, reject)=> {
setTimeout(()=> {
reject('p4')
}, 50)
})
const r1 = Promise.race([p1, p2, p3])
const r2 = Promise.race([p1, p2, p4])
console.log(r1)
console.log(r2)
7. promise的链式调用
const p = new Promsie()
cosnt result = p.then()
,
其中result
也是一个promise对象(.then()
返回的依旧是promise
对象)。因此,也可以通过.then()
进行调用,这就是promise
的链式调用
8. async
通过ansyc
修饰的函数,调用后返回的是promise风格的数据
return
非promise
风格的数据,调用后的状态是成功,返回的内容是return
return
的数据是promise
风格,调用后的状态是取决于其内部promise数据的状态throw
一个异常,调用后的状态是失败,返回的内容是throw
的内容
async function test() {
// return 123
// return new Promise((resolve, reject)=> {
// resolve('成功了')
// })
throw '抛出异常'
}
console.log(test())
9. await
await
右侧一般是promise
对象,也可以是其他类型的数据- 如果是
promise
对象,await返回的是promise
返回的正确的值,如果promise
对象返回错误,要用try()catch(e){}
进行接收 - awiat必须写在用async修饰的函数内部,但是用async修饰的函数内部,可以不写await
const test = async () => {
p1 = new Promise((resolve, reject)=> {
resolve('成功了')
})
p2 = new Promise((resolve, reject)=> {
reject('失败了')
})
try{
const data1 = await p1
console.log(data1)
} catch(e) {
console.log(e)
}
try{
const data2 = await p2
console.log(data2)
} catch (e) {
console.log(e)
}
}
test()