异步专题
总结
- 同步和异步
- Promise 写法
- promise状态
- then的返还值
- Async 和 await 写法
同步异步概念
-
同步和异步
-
同步和异步是一种消息通知机制
-
同步阻塞: A调用B,B处理获得结果,才返回给A。A在这个过程中,一直等待B的处理结果,没有拿到结果之前,需要A(调用者)一直等待和确认调用结果是否返回,拿到结果,然后继续往下执行。
做一件事,没有拿到结果之前,就一直在这等着,一直等到有结果了,再去做下边的事
- 异步非阻塞: A调用B,无需等待B的结果,B通过状态,通知等来通知A或回调函数来处理。
做一件事,不用等待事情的结果,然后就去忙别的了,有了结果,再通过状态来告诉我,或者通过回调函数来处理。
-
回调
- 回调地狱:函数作为参数,层层嵌套-代码不利于维护
- promise来改造回调 - 链式操作
自定义事件
let elem = new EventTarget();
elem.addEventListener('event',fn,false);
elem.dispatchEvent(new CustomEvent("event"))
promise使用
- ES6的Promise对象是一个构造函数,用来生成Promise实例。
所谓Promise对象,就是代表了未来某个将要发生的事件(通常是一个异步操作)。
将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数- 3种状态 : pending 、resolved 和 rejected
- 链式调用then的2个参数;onresolved 和 onrejected;
- 链式调用then的3种返回值
会返回一个新的 Promise 对象, 但是状态会有几种情况:- 没有返回值- promise 对象,状态延续上个promise对象状态
- 返回值是 普通值, resolved 的 promise 对象
- 返回值是 promise 对象-直接返回这个promise 对象,状态延续上个promise对象状态
- 5种静态方法:resolve、reject、all、race、finally
all都resolved才执行 -手写
race执行最快的 -手写
async及await优雅使用-用同步思维解决异步操作-async与await搭配使用
- async function fn(){
try{
let r1 = await p1();
let r2 = await p2();
}.catch(err){
console.log(err)
}
}
浙公网安备 33010602011771号