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使用微任务,而其他异步机制可能使用常规任务)并不是特别有益。
微妙的不一致不是通常想要的功能。
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))
添加回答
举报
