新客户端 javascript 库的回调或承诺?
Callbacks or promises for new client-side javascript library?
截至 2017 年,所有当前版本的网络浏览器都支持 ES6 promise。
如果我现在要创建一个浏览器端 javascript 库,使用回调函数与使用 promises 的优缺点(或相关注意事项)是什么?是否仍然可以考虑使用回调?
注意:库的操作是 I/O 相关的,因此异步操作很适合,所以我认为同步操作不是一个选项。
嗯,你当然应该使用 promises。它只是一个更好的处理异步事物的概念框架。如果你不这样做,那么 90% 的用户会做的第一件事就是将你的 API 包装成承诺,而你不想让他们那样做,是吗?
理论上,您可以采用双模式方法,即 callback
参数的存在与否控制特定 API 的行为是以回调方式还是类似承诺的方式。许多在 pre-promise 时代扎根的图书馆都走这条路。您是否愿意对新库采用这种方法值得怀疑。
您可以为您的库提供与用户选择的 promise 库集成的能力,以防他不喜欢或不能使用本机 promise。用户会用 initNcasasLibrary(Promise)
之类的东西来初始化你的库。或者你可以让你的用户通过确保包含一个 polyfill 来确保 Promise
可用,如果他的目标浏览器可能没有它的话。
截至 2017 年,所有当前版本的网络浏览器都支持 ES6 promise。
如果我现在要创建一个浏览器端 javascript 库,使用回调函数与使用 promises 的优缺点(或相关注意事项)是什么?是否仍然可以考虑使用回调?
注意:库的操作是 I/O 相关的,因此异步操作很适合,所以我认为同步操作不是一个选项。
嗯,你当然应该使用 promises。它只是一个更好的处理异步事物的概念框架。如果你不这样做,那么 90% 的用户会做的第一件事就是将你的 API 包装成承诺,而你不想让他们那样做,是吗?
理论上,您可以采用双模式方法,即 callback
参数的存在与否控制特定 API 的行为是以回调方式还是类似承诺的方式。许多在 pre-promise 时代扎根的图书馆都走这条路。您是否愿意对新库采用这种方法值得怀疑。
您可以为您的库提供与用户选择的 promise 库集成的能力,以防他不喜欢或不能使用本机 promise。用户会用 initNcasasLibrary(Promise)
之类的东西来初始化你的库。或者你可以让你的用户通过确保包含一个 polyfill 来确保 Promise
可用,如果他的目标浏览器可能没有它的话。