假设给出如下代码模板:
// 一个异步函数 function someFun(callback) {} // 可以传 callback 执行 someFun(console.log); // 可以返回 Promise someFun().then(console.log);
someFun
函数要如何编写才能支持 2 种调用风格呢?
我写了篇文章进行详细介绍,欢迎拍砖。
1 moult 2020-09-11 13:44:29 +08:00 via iPhone ![]() var a=new promise(...); if(callback) a.then(callback) else return a; |
![]() | 2 youmoo OP @moult 可行。不过可以优先 callback, 无 callback 时再 new promise,这样可以省一个 promise 。 |
![]() | 3 zhuangzhuang1988 2020-09-11 13:55:41 +08:00 |
![]() | 4 youmoo OP @zhuangzhuang1988 嗯。很多库或框架都有用到这种风格。 |
![]() | 5 tikazyq 2020-09-11 1401:11 +08:00 typeof 应该可以解决你的问题 |
![]() | 6 flowfire 2020-09-11 14:21:52 +08:00 这。。。。感觉像是 promisify ? 正常情况就是判断参数是否存在吧 |
![]() | 7 lovecy 2020-09-11 14:55:04 +08:00 typof callback === "function" |
![]() | 8 tangchi695 2020-09-11 15:00:49 +08:00 判断有没有 callback 不就完事儿了吗 |
![]() | 9 momocraft 2020-09-11 15:17:50 +08:00 不管有没有 callback 都返回 promise 如果有 callback 就 then 一份 |
![]() | 10 lin07hui 2020-09-11 16:57:30 +08:00 function someFun(callback) { const res = { data: "..." }; typeof callback === "function" && callback(res); return Promise.resolve(res); } |