-1

我在 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_endresolve(尽管这也可能来自错误)是有意义的,但在这种情况下,最重要的跟踪命令on_receive实际上与“进度”无关,正如 wiki 所述。

我正在做的这段代码是一个供公众使用的节点包,所以我不知道以这种方式使用通知是否真的会让其他开发人员感到困惑。

4

1 回答 1

2

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

当然不。

承诺的三条腿并不完全是我的回调

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

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

不,on_end不应该从错误中调用。Promise 只能表示流程成功(已完成)或失败(已拒绝)。一个进程不能两者兼得。

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

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

于 2014-12-05T16:03:36.847 回答