Javascript 添加对承诺的支持的最佳方法

Javascript 添加对承诺的支持的最佳方法,javascript,Javascript,我想转换不使用标准node.js回调样式的现有包,以支持现有回调样式或承诺。考虑一下: api.getSomething({prop: ...}, callback) 它当前使用request库和api。getSomething执行如下操作: return request({ url: ..., data: ..., }, callback) 在我看来,这种高级解决方案基本上是检查回调是否未定义,如果未定义,则返回一个承诺。然而,请求库的使用似乎使这一点复杂化,因为我想要一个请求库,

我想转换不使用标准node.js回调样式的现有包,以支持现有回调样式或承诺。考虑一下:

api.getSomething({prop: ...}, callback)
它当前使用
request
库和
api。getSomething
执行如下操作:

return request({
  url: ...,
  data: ...,
}, callback)
在我看来,这种高级解决方案基本上是检查
回调
是否未定义,如果未定义,则返回一个承诺。然而,
请求
库的使用似乎使这一点复杂化,因为我想要一个
请求
库,它在没有定义回调时返回一个承诺,而请求则不然


使用
请求承诺
库是否有意义?如果提供了回调,则在
然后
中调用回调,否则只返回
然后
中的数据?

是的,您可以这样做。确保总是简单地返回一个承诺,如果提供了回调,也可以调用它

const promise = request({
  url: …,
  data: …,
});
if (typeof callback == "function") {
    promise.then(result => { callback(null, result); }, error => { callback(error); });
}
return promise;
如果您不止一次这样做,我建议您使用一个helper函数。

好吧,两种方法都可以:

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;
     }
  }
你用哪一个真的取决于你。然而,你应该考虑更新一个依赖项会导致比你预期的更多的麻烦(但是<代码>请求承诺< /代码>应该被很好地保持)。