1. 什么是异步、同步?
在说同步和异步的同时,我们先来了解什么是JavaScript的执行机制
JavaScript是单线程的,这句话并不全 准确来说JavaScript的主线程是单线程的
在JavaScript当中还有类似ajax线程 事件线程 文件操作线程(node)等线程
在主线程当中还有执行栈的概念 在执行栈当中执行的是同步操作
而在队列例如事件队列当中的执行的是异步代码。可以了解一下什么是事件循环(Event Loop)
2 . 什么是promise?
Promise 是社区提出的一种异步解决方案。(官方解释)
- promise是一个容器,里面保存着某个未来才会结束的事件 (比如 异步操作的结果)
- 语法上:promise是一个对象,可以从它获取异步操作的消息
- promise提供统一的api,所以各种异步操作都可以用同样的方法进行处理
promise有以下几种特点
3种状态
pending
resolve
Reject
2种结果
resolve -> fulfilled
reject -> rejected
优点:
- 解决回调嵌套的层级书写问题
缺点:
- promise一旦新建,就会立即执行,中途无法取消
- 内部抛出错误,无法映射到外部
- 处于pending状态时,是不能知道目前进展到哪个阶段的 ( 刚开始?,即将结束?)
案例:
使用promise封装ajax异步加载图片等
处理异步的六种解决方案
- 回调函数
- promise
- Generator生成器函数
- async await
- 事件监听
- 发布订阅/订阅者模式