MSB*_*MSB 15 javascript node.js promise es6-promise
在阅读了几篇关于es6承诺有多么伟大以及为什么要实现它们的文章之后,我一直觉得我的所有(非平凡的)javascript函数都应该是promises.
事实上,在使用它们编写代码时我感觉很棒,因为我避免了厄运的三角形,看起来似乎得到了清晰简洁的代码.(它确实使执行的推理变得更加简单).
我无法找到的是:你什么时候不使用承诺?我什么时候避免使用它们?
更新:
虽然我已经看到了一些像API一致性这样的优点,但我还没有找到一个坚实的NO案例.Lux的答案表明,获取事件发射器的操作应该避免它们,因为重复的回调与promises不兼容.但我确实觉得答案仍然缺乏实质性的检查(正确)现在.
jak*_*b.g 18
一些经验法则:
当您的方法可以同步(简单数据转换)时,则在该方法中使用同步代码.
然而,如果该方法可以是同步的,有时,和异步有时(基于内部或外部状态的多个代码路径),它应该是异步始终.否则,您可能会遇到代码在复杂场景中的行为方式的意外细微差异,因此最好避免混合这两种态度.
[edit]正如评论中所指出的,当你的方法现在是同步的,但你坚信它可能需要在将来的某个时刻进行异步工作时,你可能希望从一开始就使用promises来避免代价高昂的重构.
通常,您的API应该是一致的,因此最好在任何地方使用promises,或者在任何地方使用回调.这样可以更容易地推断出代码.
如果您正在编写超高性能代码和/或需要较少的内存占用,您可以考虑不使用promises而是使用回调,或使用专注于性能的promise库,如bluebird,而不是本机Promise实现/一般用例polyfill .
[编辑]无论如何,网络平台的新增功能,如全局获取功能,返回一个Promise,似乎在即将到来的未来,越来越多的浏览器内置插件将在promises上运行.所以如果你愿意写现代代码,你就不会逃避承诺.
您使用promises进行一次性异步操作.启动操作,执行操作,通知调用者完成或结果或错误,然后完成.
在那里你不使用的情况下的诺言是那些除了上述的不同: