【问题标题】:Is changing the meaning of promise methods a good idea? [closed]改变 promise 方法的含义是个好主意吗? [关闭]
【发布时间】:2015-02-03 17:35:02
【问题描述】:

我在 Node.js 中有一个长时间运行的方法,它会一直监听命令行输出,直到用户关闭命令或错误停止。长话短说,这个方法有三个回调:

  • on_receive:将命令行的任何新输出以字符串或转换后的 json 形式返回给回调。
  • on_end:当用户终止执行时,我发送这个。
  • on_error:当命令行提示错误时,我发送给用户。它总是意味着命令行执行的结束,所以之后会调用on_end(尽管如果需要也可以在之前调用)。

在任何时候调用该命令后,我都会引用生成的孩子,以便稍后将其杀死或限制数量。

现在,我正计划转向 Promise(我正在使用 Kris Kowal 的库,q,但 Promise 的三个部分与我的回调并不完全一样(取自他的 wiki):

  • resolve:使用已履行的承诺调用 resolve 会导致用传递的承诺的履行值履行承诺。
  • reject: 调用 reject 会导致 promise 被拒绝。
  • notify:用一个值调用 notify 会导致 promise 被通知该值的进度。也就是说,任何使用 Promise 注册的 onProgress 处理程序或从 Promise 派生的 Promise 都将使用进度值调用。

on_error 绑定到reject 或者将on_end 绑定到resolve 是有意义的(尽管这也可能来自错误),但在这种情况下要跟踪的最重要的命令是on_receive ,实际上与 wiki 所述的“进度”无关。

我做的这段代码是一个供公众使用的node包,所以不知道这样使用notify会不会真的让其他开发者感到困惑。

【问题讨论】:

  • 你的“on_receive”怎么不像“progress”?对我来说当然是这样。
  • 此外,您似乎遗漏了问题的最后一个字,因此您的问题并不是 100% 清楚。
  • @Pointy 对不起,我完成了这个问题(看起来我过度撤消了)。而且,它不是一个可能在未来任何时候结束的过程,就像while(true),所以实际上并不存在进步的概念。因此我的问题
  • 好吧,如果您要围绕 Promise 库构建您的 API,我认为您别无选择。对于您的模型,接收更多数据与其他任何事情一样接近“进步”。
  • @Pointy 哦,好吧,我注意到一些可怕的事情:通知和进度不再是q 的一部分。我想我无法继续在这条赛道上......

标签: javascript promise q nomenclature


【解决方案1】:

改变 promise 方法的含义是个好主意吗?

绝对不是。

promise 的三个部分与我的回调不完全一样

他们不需要。大多数 Promise 甚至没有进度的概念,这就是为什么它在 V2 中被弃用的原因。您需要记住的唯一一件事:promise 表示将异步变为可用的结果

on_error 绑定到reject 或者将on_end 绑定到resolve 是有意义的(尽管这也可能来自错误)

不,不应从错误中调用on_end。一个promise 只能表示进程成功(fulfilled)或失败(rejected)。一个进程不能两者兼得。

在这种情况下要跟踪的最重要命令 on_receive 实际上与“进度”无关

是的。进度是一个输出信号。您描述on_receive 回调的方式,它是您的函数的输入,描述了如何处理一些数据。它可能不会被延迟提供,但对于函数操作来说是必不可少的。在这种情况下,它应该只是(保持)一个参数

【讨论】:

  • 它已被弃用,因为它是一个无法聚合或组合的抽象抽象 - 不是因为它在其他实现中不流行。
  • @BenjaminGruenbaum:是的,它不像 Promise 那样容易组成,这就是为什么大多数 Promise 没有使用它的原因 :-)
  • 尽管它已关闭,但我最终还是这样做了,所以谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 2010-11-27
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多