javascript - 何时不使用 promise

标签 javascript node.js promise es6-promise

在阅读了数十篇关于 es6 Promise 有多棒以及我们为什么要实现它们的文章后,我感到所有我的(非平凡的)javascript 函数都应该是 Promise。

事实上,我在使用它们编写代码时感觉很棒,因为我避免了厄运三 Angular 形,并且看似获得了清晰简洁的代码。 (它确实使关于执行的推理变得更加简单)。

我找不到的是:你什么时候使用 promise ?我什么时候避免使用它们?

更新:

虽然我已经看到了 API 一致性等一些重要方面,但我还没有找到一个可靠的 NO 案例。 Lux 的回答表明,获取事件发射器的操作应该避免它们,因为重复的回调与 Promise 不兼容。然而,我确实觉得答案仍然缺乏实质内容来检查它(正确)。

最佳答案

一些经验法则:

  1. 当您的方法可以是同步的(简单的数据转换)时,请在该方法中使用同步代码。

    但是如果方法可以是同步的sometimes,和异步的sometimes(基于内部或外部状态的多个代码路径),它应该是异步的总是。否则,您的代码在复杂场景中的行为方式可能会遇到意想不到的细微差异,因此最好避免将这两种态度混为一谈。

    [edit] 如评论中所述,当您的方法目前是同步的,但您坚信它可能需要在将来的某个时间点执行异步工作时,您可能希望从一开始就使用 Promise 以避免代价高昂的重构.

  2. 一般来说,你的 API 应该是一致的,所以最好要么处处使用 Promise,要么处处使用回调。这将更容易推理代码。

  3. 如果您正在编写超高性能代码和/或需要低内存占用,您可以考虑不使用 Promise 而是使用回调,或者使用专注于性能的 Promise 库,例如 bluebird , 而不是原生 Promise 实现/一般用例 polyfill。

  4. [编辑] 不管怎样,网络平台的新功能,比如 global fetch函数,返回一个 Promise,而且似乎在即将到来的 future ,越来越多的浏览器内置插件将在 Promise 上运行。所以如果你愿意编写现代代码,你就不会逃避 promise 。

关于javascript - 何时不使用 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527292/

相关文章:

mysql - 如何在nodejs中进行动态的mysql查询次数?

javascript - 如何将异步 Promise 函数重构为非异步以避免反模式

swift - Swift 和 Spring 中的链接动画无法正常工作

javascript - 在 Google Drive 上安装 Node.js(或使用 Google Drive 运行您的 Web 应用程序)

node.js - Angular 2无法连接到服务器

node.js - 如何处理循环中的 promise ?

java - 使用 AJAX 调用输出存储为 BLOB 的 PDF 文件内容而不创建文件

javascript - 使用外部按钮切换播放/暂停 Youtube 视频

javascript - 如何将 map 设置为另一个 div 中的 div?

javascript - 使用 vuejs 和 axios 显示来自 JSON API 的数据