Node.js 库应该同时支持 promises 和 callbacks
should Node.js library support both promises and callbacks
我正在开发一个 Node.js 库项目,该项目向用户公开异步 APIs。我在javascript工作的时间不长,不过好像几年前,回调是用来处理异步的results/errors。然后在 ES6 中引入了 promises,在 ES8 中引入了 async-await(这只是使用 promises 的更方便的方式)。
我的问题是 API 的典型用户目前期望什么?我注意到在几个同时支持 promises 和 callbacks 的项目中有一个习惯用法,即函数将回调作为最后一个参数,如果没有提供,return 就是一个 Promise。
我想知道在当前的项目中是否应该遵循这个惯用语,还是应该将回调一起删除?还会有人使用回调吗?
我注意到 async-await 正在成为主流风格,但 Node.js API 本身仍然是基于回调的(事实上 API 通常 return事件发射器,而不是承诺,以便用户可以在 return 值上注册事件)。
所以我只是在寻找来自 Node.js 社区的关于应该采取哪个方向的一般意见。
谢谢。
编辑:
感谢您的回答。我被要求澄清一些关于该项目的事情,以防有更多建议:
(1) API 旨在用于访问特定产品
(2) 所有的调用都涉及到网络通信,基本上是request/response.
我们确实打算支持承诺(这样每个请求都会给用户一个可以实现或拒绝的承诺),唯一的问题是是否还应该支持回调。
也许我可以改写问题以减少基于意见的问题:
1) 对于最近发布的 Node.js 库(在语言支持 async-await 之后)并且具有与上述类似的要求,主要风格是什么?你能给我举个例子吗?
2) 是否存在应用程序更愿意通过回调而不是 promise 处理异步 result/error 的任何场景?
谢谢。
您的目标用户群有多大?
如果它很小——即包含在一个易于定义的群体和现代技术栈中,扮演独裁者并只选择一种风格。
如果它很大并且必须 运行 在许多可能是遗留平台上,请考虑只提供回调,或提供多种风格。
多种可能性
如果您的库需要与客户端程序建立同步关系,那么您可能希望使用回调(I/O 依赖的程序)。否则,如果您的 API 响应时间长且不一致,您肯定希望能够处理承诺,这样您就不会成为无法等待每个请求(路由网络流量等)的瓶颈应用程序。
结论
在我个人看来,Node.js 的伟大之处在于 promises 的异步特性,它让您可以编写灵活的程序。归根结底,人们将出于各种目的使用您的图书馆,您可以为用户提供的选择越多越好。祝你好运!
我正在开发一个 Node.js 库项目,该项目向用户公开异步 APIs。我在javascript工作的时间不长,不过好像几年前,回调是用来处理异步的results/errors。然后在 ES6 中引入了 promises,在 ES8 中引入了 async-await(这只是使用 promises 的更方便的方式)。
我的问题是 API 的典型用户目前期望什么?我注意到在几个同时支持 promises 和 callbacks 的项目中有一个习惯用法,即函数将回调作为最后一个参数,如果没有提供,return 就是一个 Promise。
我想知道在当前的项目中是否应该遵循这个惯用语,还是应该将回调一起删除?还会有人使用回调吗?
我注意到 async-await 正在成为主流风格,但 Node.js API 本身仍然是基于回调的(事实上 API 通常 return事件发射器,而不是承诺,以便用户可以在 return 值上注册事件)。
所以我只是在寻找来自 Node.js 社区的关于应该采取哪个方向的一般意见。
谢谢。
编辑:
感谢您的回答。我被要求澄清一些关于该项目的事情,以防有更多建议:
(1) API 旨在用于访问特定产品
(2) 所有的调用都涉及到网络通信,基本上是request/response.
我们确实打算支持承诺(这样每个请求都会给用户一个可以实现或拒绝的承诺),唯一的问题是是否还应该支持回调。
也许我可以改写问题以减少基于意见的问题:
1) 对于最近发布的 Node.js 库(在语言支持 async-await 之后)并且具有与上述类似的要求,主要风格是什么?你能给我举个例子吗?
2) 是否存在应用程序更愿意通过回调而不是 promise 处理异步 result/error 的任何场景?
谢谢。
您的目标用户群有多大?
如果它很小——即包含在一个易于定义的群体和现代技术栈中,扮演独裁者并只选择一种风格。
如果它很大并且必须 运行 在许多可能是遗留平台上,请考虑只提供回调,或提供多种风格。
多种可能性
如果您的库需要与客户端程序建立同步关系,那么您可能希望使用回调(I/O 依赖的程序)。否则,如果您的 API 响应时间长且不一致,您肯定希望能够处理承诺,这样您就不会成为无法等待每个请求(路由网络流量等)的瓶颈应用程序。
结论
在我个人看来,Node.js 的伟大之处在于 promises 的异步特性,它让您可以编写灵活的程序。归根结底,人们将出于各种目的使用您的图书馆,您可以为用户提供的选择越多越好。祝你好运!