返回回调或承诺的函数

问题描述 投票:-2回答:2

我正在构建一个库,我想这样做,以便消费者可以通过回调或Promise调用我的函数。

最佳方法是什么?

javascript
2个回答
1
投票

您始终可以兑现承诺,不会破坏任何承诺。检测是否已定义回调,如果已定义,则执行回调。

function doubleIt(x, callback) {
  return new Promise( (resolve) => {
    var ans = x * 2
    resolve(ans)
    callback && callback(ans)
  })
}

doubleIt(4).then(res => console.log(res))

doubleIt(10, res => console.log(res))

1
投票

最佳方法完全取决于用例。

对于软件中任何事物的“最佳方法是什么,答案都取决于它”。

话虽这么说,一种典型的方法是分支传递的参数。如果给出了回调,则使用否,则返回诺言。

这是一个主意(其中底层逻辑位于返回承诺的doStuff函数中:

function myModule(cb) {
  if (cb) {
    doStuff()
      .then(result => cb(null, result))
      .catch(err => cb(err));
  }
  return doStuff();
}

我的2美分:

支持这两种方法的唯一真正好处是,如果您需要在没有承诺的情况下支持环境。

否则,这只是不必要的额外复杂性。

现在您必须在代码中保持两次逻辑。

此外,具有返回类型不一致或以不一致的方式运行的函数(承诺使用微任务,而其他异步机制可能使用常规任务)并不是特别有益。微妙的不一致通常不是所需的功能。

© www.soinside.com 2019 - 2024. All rights reserved.