为了账号安全,请及时绑定邮箱和手机立即绑定

返回回调或承诺的函数

返回回调或承诺的函数

宝慕林4294392 2022-09-02 21:17:12
我正在构建一个库,我想让它成为一个,以便消费者可以使用回调或承诺来调用我的函数。最好的方法是什么?
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

最好的方法完全取决于用例。


对于软件中的任何东西来说,“什么是最好的方法”的答案是“视情况而定”。


话虽如此,一种典型的方法是对通过的论点进行分支。如果给出了回调,请使用它,如果没有,则返回一个 promise。


这里有一个想法(底层逻辑在承诺返回函数中):doStuff


function myModule(cb) {

  if (cb) {

    doStuff()

      .then(result => cb(null, result))

      .catch(err => cb(err));

  }

  return doStuff();

}

我的2美分:


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


否则,它只是额外的复杂性,没有必要。


现在,您必须在代码中维护两倍的逻辑。


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


微妙的不一致不是通常想要的功能。


查看完整回答
反对 回复 2022-09-02
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

你总是可以回报一个承诺,不会破坏任何东西。检测是否定义了回调,如果定义了,则执行它。


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))


查看完整回答
反对 回复 2022-09-02
  • 2 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号