我在 Node.js 中有一个长时间运行的方法,它一直在监听命令行输出,直到用户关闭命令或错误停止。长话短说,这个方法有三个回调:
on_receive
:将命令行中的任何新输出以字符串或转换后的 json 形式返回给回调。on_end
:当用户终止执行时,我发送这个。on_error
: 当命令行提示错误时,我发送给用户。它总是意味着命令行执行的结束,所以on_end
在之后调用(尽管如果需要也可以在之前调用)。
在任何时候调用命令后,我都会引用生成的孩子,这样我可以稍后杀死它或限制数量。
现在,我计划转向承诺(我正在使用 Kris Kowal 的库,q,但承诺的三个部分与我的回调不完全一样(取自他的 wiki):
resolve
: 使用已履行的承诺调用 resolve 会导致用传递的承诺的履行值履行承诺。reject
: 用一个原因调用reject 会导致promise 被这个原因拒绝。notify
: 用一个值调用 notify 会导致 promise 被通知该值的进度。也就是说,任何使用 Promise 注册的 onProgress 处理程序或从 Promise 派生的 Promise 都将使用进度值调用。
on_error
绑定到reject
并且可能绑定on_end
到resolve
(尽管这也可能来自错误)是有意义的,但在这种情况下,最重要的跟踪命令on_receive
实际上与“进度”无关,正如 wiki 所述。
我正在做的这段代码是一个供公众使用的节点包,所以我不知道以这种方式使用通知是否真的会让其他开发人员感到困惑。