Node.js库应同时支持promise和回调

时间:2019-03-29 01:11:21

标签: javascript node.js async-await es6-promise asynccallback

我正在研究一个Node.js库项目,该项目向用户公开了异步API。我已经很长时间没有使用JavaScript了,但是似乎几年前,回调用于处理异步结果/错误。然后在ES6中引入了promise,在ES8中引入了async-await(这是使用promise的更便捷的方式)。

我的问题是该API的典型用户当前期望什么?我注意到在几个项目中都支持promise和callback的一个习惯用法,即函数将callback作为最后一个参数,如果没有提供,则返回Promise。

我想知道在当前项目中是否应该遵循这种习惯用法,还是应该一起删除回调?还会有人使用回调吗?

我注意到async-await成为主流风格,但是Node.js API本身仍然基于回调(实际上,API通常返回事件发射器,而不是诺言,以便用户可以在返回值上注册事件)。

因此,我只是从Node.js社区中寻找有关采取哪个方向的一般信息。

谢谢。

编辑:

谢谢您的回答。如果有更多建议,我被要求澄清有关该项目的几件事:

(1)该API旨在用于访问特定产品

(2)所有呼叫都涉及网络通信,基本上是请求/响应。

我们绝对打算支持promise(这样每个请求都会给用户一个可以实现或拒绝的promise),唯一的问题是是否还应该支持回调。

也许我可以改写这些问题,以减少基于意见的看法:

1)对于最近发布的(在语言中支持async-await之后)并且具有与上述类似的要求的Node.js库,主要的样式是什么?您能给我指出一些例子吗?

2)在任何情况下,应用程序都希望通过回调而不是通过诺言来处理异步结果/错误吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您的目标用户有多少?

如果尺寸较小(即包含在易于定义的组和现代技术堆栈中),请扮演独裁者并选择一种风格。

如果它很大并且必须在许多可能的旧平台上运行,请考虑仅提供回调或提供多种功能。

答案 1 :(得分:0)

各种可能性

如果您的库要求与客户端程序具有同步关系,则可能要使用回调(依赖于I / O的程序)。否则,如果您的API的响应时间长且不一致,则您绝对希望能够处理Promise,这样您就不会成为无法等待每个请求(如路由Webtraffic等)的瓶颈应用程序。

结论

在我个人看来,使Node.js脱颖而出的是Promise的异步特性,该特性使您可以编写灵活的程序。归根结底,人们将出于各种目的使用您的库,并且可以为您的用户提供更好的选择。祝你好运!