2 回答

TA貢獻1895條經(jīng)驗 獲得超7個贊
最好的方法完全取決于用例。
對于軟件中的任何東西來說,“什么是最好的方法”的答案是“視情況而定”。
話雖如此,一種典型的方法是對通過的論點進行分支。如果給出了回調(diào),請使用它,如果沒有,則返回一個 promise。
這里有一個想法(底層邏輯在承諾返回函數(shù)中):doStuff
function myModule(cb) {
if (cb) {
doStuff()
.then(result => cb(null, result))
.catch(err => cb(err));
}
return doStuff();
}
我的2美分:
支持這兩種方法的唯一真正好處是,如果您需要在沒有承諾的情況下支持環(huán)境。
否則,它只是額外的復(fù)雜性,沒有必要。
現(xiàn)在,您必須在代碼中維護兩倍的邏輯。
此外,具有不一致的返回類型或以不一致的方式運行的函數(shù)(promise使用微任務(wù),而其他異步機制可能使用常規(guī)任務(wù))并不是特別有益。
微妙的不一致不是通常想要的功能。

TA貢獻1816條經(jīng)驗 獲得超4個贊
你總是可以回報一個承諾,不會破壞任何東西。檢測是否定義了回調(diào),如果定義了,則執(zhí)行它。
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))
添加回答
舉報