JavaScript的异步

一、回调函数(callBack)

1
2
3
setTimeout(()=>{
//callback的函数体
},500)

缺点:
回调地狱,不能捕获错误,不能return

缺乏顺序性,不好调试
嵌套函数存在耦合性,如果有改动,会牵动很多东西
如果嵌套存在多层会很难维护

优点:
解决了同步的问题,能够按照顺序执行,如果有一个任务执行时间过长,后面的任务都会排队等待执行。

二、promise

Promise是解决callback的问题
Promise实现了链式调用,每次 .then 都会返回一个全新的Promise。
如果在.then中return,return的结果会被Promise.resolve()包装。

优点:
解决了回调地狱的问题

缺点:
promise无法被取消,错误需要通过回调函数来捕获

三、generator

特点:可以控制函数的执行,可以配合co函数使用

1
2
3
4
5
6
7
8
9
function *fetch(){
yield ajax('xxx0',()=>{})
yield ajax('xxx1',()=>{})
yield ajax('xxx2',()=>{})
}
let it = fetch();
let result1 = it.next();
let result2 = it.next();
let result3 = it.next();

generator的.next执行后会返回一个对象。

四、saync/await

优点:写法简洁,代码清晰,不用像 Promise 写一大堆 then 链,处理了回调地狱的问题。
缺点:await 将异步代码改造成同步代码,如果多个异步操作没有依赖性而使用 await 会导致性能上的降低。(await不可滥用以免造成阻塞)

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2021 伯温

请我喝杯咖啡吧~