当我不使用Promise的“ then”功能时,是否有任何(负面)副作用?

frontend_dev

我有一个返回Promise的函数。

现在,有时对于消费者来说,在该Promise上使用“ then”功能很有意义。但是有时,消费者根本不关心Promise何时解决,也不关心结果-换句话说,同样的功能也应该能够以“一劳永逸”的方式被调用。

所以我想要这两种使用场景:

func().then( ... ); // process Promise
func(); // "fire and forget"

这显然是可行的,但我想知道这是否被认为是“不良做法”,尤其是这种使用模式是否会产生任何不良副作用,即。导致内存泄漏?现在我正在使用蓝鸟,但是如果有任何不同,我会考虑切换到本地Promises。

TJ人群

请记住,每次致电都会then带来新的承诺。因此,任何由于没有附加任何解析处理程序而导致的承诺而导致内存泄漏的Promise实现都将是一个损坏的实现,对于所有这些承诺,我们永远不会将处理程序挂接到返回。我非常怀疑ES2015的promises,Bluebird,Q等的实现是否具有这种行为。

另外,由于从概念上讲,诺言的解析处理程序基本上只是由诺言存储的函数,然后在适当时调用,因此,如果您从不提供任何要存储的函数,则不太可能发生内存泄漏。

但是,一劳永逸的问题出在哪里,而不仅仅是内存泄漏问题:它打破了Promise的主要规则之一:要么处理拒绝,要么将promise链返回到其他可以处理拒绝的东西。由于您未执行此操作,因此如果操作失败,则会有未处理的拒绝。未处理的拒绝会报告给控制台,并且在某些环境中可能会终止您的应用程序(有时,Node.js可能会在发生这种情况时开始终止该过程,请参阅此未解决的问题)。

如果then返回新承诺的事实令人惊讶,请考虑:

let p1 = new Promise(resolve => {
  setTimeout(() => {
    resolve('a');
  }, 100);
});
let p2 = p1.then(result => {
  console.log("p1.then got " + result);
  return 'b';
});
p2.then(result => {
  console.log("p2.then got " + result);
});

哪个输出

p1。然后得到一个
p2。然后得到b

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Windows机器上工作时,使用unix行尾是否有任何副作用?

来自分类Dev

当我不使用引号时,argc如何工作?

来自分类Dev

是否有任何CheckInstall副作用,还是我应该每次都使用它?

来自分类Dev

为什么当我使用 SwingWorker 时我的图像没有下载,而当我不使用时却下载?

来自分类Dev

使用使用 operator new 分配的数据结构的 C 代码是否有任何副作用

来自分类Dev

当我不使用全局名称空间时,为什么web.xml不起作用?

来自分类Dev

当我在域名前不使用https时,SSL认证不起作用

来自分类Dev

当我不使用selinux时,/ selinux文件夹有什么用?

来自分类Dev

当我不使用名称空间时,是否可以删除redis中所有与sidekiq相关的条目?

来自分类Dev

当我仅更改状态而不使用任何CSS时,为什么我的React app菜单会打开?

来自分类Dev

当我使用CreateFont()获取字符串的字体时,不使用参数

来自分类Dev

当我在猫鼬中使用findByIdAndUpdate时如何不使用_id返回数据?

来自分类Dev

当我单击按钮而不使用performSegueWithIdentifier时,未调用prepareForSegue

来自分类Dev

当我不使用JOIN时出现“太大以至JOIN”错误

来自分类Dev

pytest说当我不使用夹具时找不到夹具

来自分类Dev

当我不使用PHPExcel将文件另存为PDF时出错

来自分类Dev

当我不使用screen.fill(color)时,Pygame文本重叠,为什么?

来自分类Dev

当我们不使用方法隐藏时,为什么不调用父方法?

来自分类Dev

当我不使用Flash时,Firefox中出现了奇怪的Shockwave Flash插件

来自分类Dev

当我不使用JOIN时出现“太大以至JOIN”错误

来自分类Dev

当我不使用pulseaudio时,Firefox为什么要创建$ HOME / .pulse-cookie

来自分类Dev

当我不使用 ForwardX11 变量 (-Y) 时,ssh 连接会卡住

来自分类Dev

当我不使用“127.0.0.1:8000”时找不到 django wagtail 页面

来自分类Dev

当我不使用界面构建器时如何实现 prepareForSegue?

来自分类Dev

当我使用 javascript 使用内部地图时,Promise 无法正常工作

来自分类Dev

当我不使用库时,为什么编译器会给我错误“未定义的外部符号”?

来自分类Dev

当我使用'npm start'命令时找不到名称'Promise'错误

来自分类Dev

当我使用'npm start'命令时找不到名称'Promise'错误

来自分类Dev

当我不使用RC4时,SQL Server弃用声明将在登录时使用

Related 相关文章

  1. 1

    在Windows机器上工作时,使用unix行尾是否有任何副作用?

  2. 2

    当我不使用引号时,argc如何工作?

  3. 3

    是否有任何CheckInstall副作用,还是我应该每次都使用它?

  4. 4

    为什么当我使用 SwingWorker 时我的图像没有下载,而当我不使用时却下载?

  5. 5

    使用使用 operator new 分配的数据结构的 C 代码是否有任何副作用

  6. 6

    当我不使用全局名称空间时,为什么web.xml不起作用?

  7. 7

    当我在域名前不使用https时,SSL认证不起作用

  8. 8

    当我不使用selinux时,/ selinux文件夹有什么用?

  9. 9

    当我不使用名称空间时,是否可以删除redis中所有与sidekiq相关的条目?

  10. 10

    当我仅更改状态而不使用任何CSS时,为什么我的React app菜单会打开?

  11. 11

    当我使用CreateFont()获取字符串的字体时,不使用参数

  12. 12

    当我在猫鼬中使用findByIdAndUpdate时如何不使用_id返回数据?

  13. 13

    当我单击按钮而不使用performSegueWithIdentifier时,未调用prepareForSegue

  14. 14

    当我不使用JOIN时出现“太大以至JOIN”错误

  15. 15

    pytest说当我不使用夹具时找不到夹具

  16. 16

    当我不使用PHPExcel将文件另存为PDF时出错

  17. 17

    当我不使用screen.fill(color)时,Pygame文本重叠,为什么?

  18. 18

    当我们不使用方法隐藏时,为什么不调用父方法?

  19. 19

    当我不使用Flash时,Firefox中出现了奇怪的Shockwave Flash插件

  20. 20

    当我不使用JOIN时出现“太大以至JOIN”错误

  21. 21

    当我不使用pulseaudio时,Firefox为什么要创建$ HOME / .pulse-cookie

  22. 22

    当我不使用 ForwardX11 变量 (-Y) 时,ssh 连接会卡住

  23. 23

    当我不使用“127.0.0.1:8000”时找不到 django wagtail 页面

  24. 24

    当我不使用界面构建器时如何实现 prepareForSegue?

  25. 25

    当我使用 javascript 使用内部地图时,Promise 无法正常工作

  26. 26

    当我不使用库时,为什么编译器会给我错误“未定义的外部符号”?

  27. 27

    当我使用'npm start'命令时找不到名称'Promise'错误

  28. 28

    当我使用'npm start'命令时找不到名称'Promise'错误

  29. 29

    当我不使用RC4时,SQL Server弃用声明将在登录时使用

热门标签

归档