异步编程
回调函数
function loadImage(src, resolve, reject) {
let image = new Image()
image.src = src
image.onload = resolve(image)
image.onerror = reject
}
loadImage(
'https://open.alrcly.com/avatar.jpg',
iamge => { },
() => { }
)
Promise
最大作用是可以封装其他方法,使其可以使用 .then 方式调用
new Promise((resolve, reject) => {
resolve('Good')
reject('NoNoNo')
}).then(
value => { // 成功
console.log(value)
},
reason => { // 拒绝
console.log(reason)
}
).catch(error =>{ // 错误
console.log(eroor)
}).finally(finally =>{ // 总是执行
console.log(finally)
})
// 直接返回成功/失败状态(前面的简写)
Promise.resolve()
Promise.reject()
// 同时处理多个 Promise
Promise.all()
Promise.allSettled()
// 多个 Promise 谁快处理谁
Promise.race()
Promise 队列
// 使用 map
function queue(num) {
let promise = Promise.resolve()
num.map(v => {
promise = promise.then(() => {
return v()
})
})
}
// 使用 reduce
function queue(num) {
num.reduce((promise, n) => {
return promise.then(() => {
return n
})
}, Promise.resolve())
}
async 和 await
function num() {
return new Promise(resolve => {
setTimeout(() => resolve('nuew'), 1000)
})
}
async function text() {
const e = await num()
console.log(e)
}
text()