Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 接受回调并返回承诺的函数:它是坏的吗?_Javascript_Callback_Promise - Fatal编程技术网

Javascript 接受回调并返回承诺的函数:它是坏的吗?

Javascript 接受回调并返回承诺的函数:它是坏的吗?,javascript,callback,promise,Javascript,Callback,Promise,我正在开发一种SDK。根据设计,所有异步函数都应该同时使用:回调和承诺。例如: function asyncOp(arg, cb) { ... } asyncOp(1, (err, res) => { ... }) // returns undefined when you pass a callback asyncOp(1).then(...) // returns a promise when callback is undefined 这种接口有什么不好的地方吗?你能提供一些提供类

我正在开发一种SDK。根据设计,所有异步函数都应该同时使用:回调和承诺。例如:

function asyncOp(arg, cb) {
...
}
asyncOp(1, (err, res) => { ... }) // returns undefined when you pass a callback
asyncOp(1).then(...) // returns a promise when callback is undefined

这种接口有什么不好的地方吗?你能提供一些提供类似接口的流行库的例子吗?

MongoDB的node.js API就是这样做的


至于有什么不好的地方吗:它会让你的库代码更难阅读。对于一致性和不支持坏模式也有一些说法,但这是基于观点的。

有点基于观点。我更喜欢1个精确的接口,所以在我自己的项目中,我总是使用promisify函数将回调转换为承诺。但是,由于将回调转换为承诺,反之亦然,只能用几行代码进行编码,因此我会选择其中一行,让您的SDK用户自行决定是否将您决定的内容转换为他们喜欢的内容。如果是新的SDK,我看不出有理由支持回调方法。承诺与回调的好处都有很好的文档记录,你们都同意。这里的问题是——您从不单独工作,可能有同事认为支持两种接口更好。