第十一章 Promise 与异步编程
异步编程
JavaScript 引擎中,只有一个主线程,当执行 JavaScript 代码块时,不允许其他代码块执行,而事件机制和回调机制的代码块会被添加到任务队列中,当符合某个触发回调或者事件的时候,就会执行该事件或者回调函数。
Promise
Promise 生命周期:pending(进行中) fulfilled(已完成) rejected(拒绝)。
Promise 不会直接返回异步函数的执行结果,如果执行成功需要使用 then(),错误时使用 catch()。
const promise = instance.get('url')
promise.then((result) => console.log(result)).catch((err) => console.log(err))
创建 Promise
Promise 构造函数只有一个参数,该参数是一个参数,称为执行器,执行器中有两个参数,分别是 resolve(),reject(),表示成功和失败。
Promise 的实例通过 resolve 或者 reject 函数返回,然后使用 then 和 catch 来获取,不能在实例中直接 return。
function promiseTest(num) {
return new Promise((resolve, reject) => {
if (num > 5) {
resolve('num大于五')
} else {
reject(Error('num小于五'))
}
})
}
promiseTest(2)
.then((result) => console.log(result))
.catch((err) => console.log(err)) // Error: num小于五
相应多个 Promise
Promise.all()方法 ,返回一个 Promise 对象,可接收单个可迭代对象(如数组),只有在可迭代对象元素都是 Promise,且都完成(resolve)后,返回的 Promise 对象才会被完成(resolve)。
let p4 = Promise.all([p1, p2, p3]);
p4.then().catch();
如果有任意一个 Promise 被拒绝,那么返回的 Promise 也会立即被拒绝。
Promise.race 方法,返回一个 Promise 对象,接收可迭代对象,数组中第一个解决的 Promise 对象的结果(resolve 或 reject),就是返回 Promise 对象的结果。