我想转换一个不使用标准node.js回调样式的现有包来支持现有的回调样式或promises。考虑类似的东西:
api.getSomething({prop: ...}, callback)
它当前使用request
库,而api.getSomething
则是这样的:
return request({
url: ...,
data: ...,
}, callback)
在我看来,这种高级解决方案基本上是检查callback
是否未定义,如果是,则返回诺言。但是,request
库的使用似乎使这一点变得复杂,因为我想要一个request
库,该库在未定义回调时返回promise,否则返回请求。
使用request-promise
库是否有意义,如果提供了回调,请在then
中调用回调,否则只需返回then
中的数据?>
答案 0 :(得分:1)
是的,您可以这样做。确保仅总是返回一个Promise,并且如果提供了回调,则也要调用它。
const promise = request({
url: …,
data: …,
});
if (typeof callback == "function") {
promise.then(result => { callback(null, result); }, error => { callback(error); });
}
return promise;
如果您多次执行此操作,建议您使用辅助功能。
答案 1 :(得分:0)
嗯,两种方法都可以起作用:
1)回调承诺:
getSomething(prop, callback) {
if(!callback) return new Promise((res, rej) => this.getSomething(prop, (err, result) => err ? rej(err) : res(result)));
//...
callback(null, "result");
}
2)承诺回调:
getSomething(prop, callback) {
const promise = Promise.resolve(/*...*/);
if(callback) {
promise.then(res => callback(null, res), callback);
} else {
return promise;
}
}
您所使用的哪个取决于您。但是,您应该考虑更新依赖项会导致比您预期的麻烦更多(但是request-promise
应该得到很好的维护)。