Appearance
Promise
异步操作
Promise 使用
Promise.then, Promise.catch,Promise.resolve 默认返回一个 resolved 的 Promise
Promise.all()只要有一个返回一个拒绝状态就是拒绝状态
Promise.race() 只要有一个返回成功状态就是成功状态,哪个返回快就选择哪个作为返回值
示例:设置接口超时时间
jsfunction query(url, delay = 4000) { const promises = [ ajax(url), new Promise((resolve, reject) => { setTimeout(() => { // eslint-disable-next-line prefer-promise-reject-errors reject('请求超时') }, delay) }), ] return Promise.race(promises).then(value => console.log(value)).catch(err => console.log(err)) }
Promise.allSettled(),无论成功还是失败,都会返回一个状态
async & await
async 函数错误处理
- 使用catchjs
async function f() { return Promise.reject('出错了') } f().catch(err => console.log(err))
- 捕获异常js
async function f() { try { await Promise.reject('出错了') } catch (e) { console.log('捕获异常') } }
- 捕获多个异常js
async function f() { try { await Promise.reject('出错了1') await Promise.reject('出错了2') } catch (e) { console.log('捕获异常') } }
await 并行执行
- 使用Promise.all
js
const p1 = () => new Promise(resolve => setTimeout(() => resolve('one'), 1000))
const p2 = () => new Promise(resolve => setTimeout(() => resolve('two'), 2000))
async function f() {
const p = await Promise.all([p1, p2])
console.log(p)
}
f()
- 使用 parallel
js
const p1 = () => new Promise(resolve => setTimeout(() => resolve('one'), 1000))
const p2 = () => new Promise(resolve => setTimeout(() => resolve('two'), 2000))
async function f() {
const p = await Promise.allSettled([p1, p2])
console.log(p)
}
f()
- 并行执行多个异步函数
js
const p1 = () => new Promise(resolve => setTimeout(() => resolve('one'), 1000))
const p2 = () => new Promise(resolve => setTimeout(() => resolve('two'), 2000))
async function f() {
const r1 = p1()
const r2 = p2()
const r3 = await r1
const r4 = await r2
console.log(r3, r4)
}
f()