我想 javascript 的异步大概是这样发展的:
1. 最开始是 xmlhttprequest ,然后通过回调函数处理异步结果。
2. 之后添加了 Promise ,通过链式调用来解决回调地狱,本质就是一个“工具类”,用户也可以手写 Promise ,在语法上没什么特别的。
3. 添加了 await 和 async 关键字,专门在语法层面改善了 Promise 的链式调用地狱。
现在的情况是,用来解决回调地狱的 Promise ,被 await 和 async 进一步取代了。
还能用到 Promise 的地方,这里有一个例子,有许多图片 node 共用一张精灵图,而图片 node 是根据用户滚动视图懒加载的,会先于精灵图的加载展示在页面文档里,因此利用了 Promise 给图片 node 一个保证,等你要展示图片的时候,再叫我。
https://github.com/MapoMagpie/eh-view-enhance/blob/d77e0655cff35818141b5e6e5246221b1fb12d74/src/platform/ehentai.ts#L211
在 211 行给 node.delaySrc 设置了 Promise 属性,但是在构造的时候将 Promise 里的 resolve 和 reject 拿走了,接着在 215 行的异步操作的回调函数里去执行 resolve 或 reject 。
最后在某个将来时刻再使用 node.delaySrc
https://github.com/MapoMagpie/eh-view-enhance/blob/d77e0655cff35818141b5e6e5246221b1fb12d74/src/img-node.ts#L146 |