You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
test 1 res1 1
test 1 res1 1
test 1 res2 1.2
test 1 res1 1
test 1 res2 1.2
test 2 res 2
test 1 res1 1
test 1 res2 1.2
test 2 res 2
test 3 res 3
test 最终结果 res 3
js三座大山
一:函数式编程
js三座大山之函数1
js三座大山之函数2-作用域与动态this
二:面向对象编程
js三座大山之对象,继承,类,原型链
三:异步编程:
js三座大山之异步一单线程,event loope,宏任务&微任务
js三座大山之异步二异步方案
js三座大山之异步三promise本质
js三座大山之异步四-Promise的同步调用消除异步的传染性
js三座大山之异步五基于异步的js性能优化
异步的传染性
正常情况我们使用异步的async/await + promise运行代码时是这样的。
如上面的代码,我们在执行 test3 函数时返回了一个 promise 的执行结果,为了拿到promise异步回到的结果,我们必须加上 async 和 await 去等待结果的反馈。 这就导致了如果要使用 async 和 await 语法糖必须在函数使用的链路上全部都要使用 async 和 await,这就是所谓的异步传染性。看起来就很丑,有木有!
消除异步的传染性
思考下能否同步的运行promsie获取结果,消除掉async/await呢?
报错 + 缓存 + event-loop
。调用异步api,将当前promise实例作为异常内容抛出,同时外层捕获这个错误
,因为是一个promise所以在上面注册callback函数
,等待后续执行,然后退出函数。第一次调用执行结束。task queue
中callback函数
,callback里面先缓存结果然后再次运行main方法.封装KillAwaitPromise对象
实现了KillAwaitPromise对象支持多个异步promise的调用 同时消除了异步的传染性,使用该对象有几个条件需要注意:
测试代码:
输出结果:
KillAwaitPromise
The text was updated successfully, but these errors were encountered: