亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回回調或承諾的函數

返回回調或承諾的函數

寶慕林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 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號