【发布时间】: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