在阅读了数十篇关于 es6 Promise 有多棒以及我们为什么要实现它们的文章后,我感到所有我的(非平凡的)javascript 函数都应该是 Promise。
事实上,我在使用它们编写代码时感觉很棒,因为我避免了厄运三 Angular 形,并且看似获得了清晰简洁的代码。 (它确实使关于执行的推理变得更加简单)。
我找不到的是:你什么时候不使用 promise ?我什么时候避免使用它们?
更新:
虽然我已经看到了 API 一致性等一些重要方面,但我还没有找到一个可靠的 NO 案例。 Lux 的回答表明,获取事件发射器的操作应该避免它们,因为重复的回调与 Promise 不兼容。然而,我确实觉得答案仍然缺乏实质内容来检查它(正确)。
最佳答案
一些经验法则:
当您的方法可以是同步的(简单的数据转换)时,请在该方法中使用同步代码。
但是如果方法可以是同步的sometimes,和异步的sometimes(基于内部或外部状态的多个代码路径),它应该是异步的总是。否则,您的代码在复杂场景中的行为方式可能会遇到意想不到的细微差异,因此最好避免将这两种态度混为一谈。
[edit] 如评论中所述,当您的方法目前是同步的,但您坚信它可能需要在将来的某个时间点执行异步工作时,您可能希望从一开始就使用 Promise 以避免代价高昂的重构.
一般来说,你的 API 应该是一致的,所以最好要么处处使用 Promise,要么处处使用回调。这将更容易推理代码。
如果您正在编写超高性能代码和/或需要低内存占用,您可以考虑不使用 Promise 而是使用回调,或者使用专注于性能的 Promise 库,例如 bluebird , 而不是原生 Promise 实现/一般用例 polyfill。
[编辑] 不管怎样,网络平台的新功能,比如 global fetch函数,返回一个
Promise
,而且似乎在即将到来的 future ,越来越多的浏览器内置插件将在 Promise 上运行。所以如果你愿意编写现代代码,你就不会逃避 promise 。
关于javascript - 何时不使用 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527292/