参考资料:
https://juejin.im/post/5a6ad46ef265da3e513352c8
-
为何单线程的js存在异步:
浏览器的内核是多线程的。包括渲染引擎线程、JS引擎线程、定时触发器线程、事件触发线程、异步http请求线程。 -
消息队列与事件循环
异步
回调函数和事件
Promise 对象
Promise为一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
特点:
- 对象的状态不受外界影响。pending(进行中)、fulfilled(已成功)和rejected(已失败)。
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果。从pending变为fulfilled和从pending变为rejected,如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。
- 一旦新建它就会立即执行,无法中途取消,无法得知目前进展到哪一个阶段。
- 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
使用方法:
// 基本使用
const promise = new Promise((resolve, reject) => {
// ... some code
if (/* 异步操作成功 */){
resolve(value); //将状态由pending变为fulfilled,将异步操作的结果,作为参数传递出去
} else {
reject(error); //将状态由pending变为rejected,将报错信息,作为参数传递出去
}
}