Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Promise 地狱又如何

  使用 Promise 解决回调地狱的问题是正确的。而且现在我参与的所有的项目都已经用上了 Promise,即便浏览器不支持也上 Polyfill。可是就算可以随心所欲地用 Promise,依然有很多人会把 Promise 玩坏(完全把 then 当一般的回调处理来用了),最后搞出一坨 Promise 的回调地狱。
  虽然在代码 Review 的时候可以把这些奇怪的代码喷成狗,但依然无法阻止人么这么写。毕竟 Promise 回调也是一种合法的使用方式,至少在语法层面上不会报错。我还想过是不是可以通过 eslint 之类的东西强行检测可以扁平化的 Promise 呢?但是考虑到 Promise 本身是一个引用而不是一种语法,就算做限制也会很困难。
  之所以大家会把 Promise 搞成 Promise 地狱是因为网络上有很多介绍 Promise 的文章都是蜻蜓点水似的只告诉大家一些最简单的概念,连 return/throw 和 Promise 链都没有说明白。所以其实大家都用过 Promise,但完全了解 Promise(看过规范或根据规范自己实现过)的人却非常少。Promise 就是一个典型的入门容易难精通的东西,说什么三分钟学会 Promise 的那一定是从入门到懵逼。
  如果在业务代码中看到 Promise 当回调函数来用的也没啥好稀奇的,实在恶心就喷呗。但也存在一些为了避免扁平化 Promise 造成错误来源无法区分而放弃扁平化的情况,又或者是考虑到内存开销而放弃对 Promise 扁平化的情况(这两种情况是我自己遇到过的,当然也可能有其它情况会考虑放弃 Promise 扁平化)。
  其实把 Promise 当回调用也不会有什么问题,仅仅是难看而已。而且就算对 Promise 做扁平化,也不会增加代码可读性(甚至会增加代码阅读难度,因为对于不懂 Promise 的人确实是很难理解的),只不过减少一些嵌套,看上去爽一点而已。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^