推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
youmoo

怎么编写一个同时支持 callback 和 promise 风格的函数

  •  
  •   youmoo · Sep 11, 2020 · 3640 views
    This topic created in 2071 days ago, the information mentioned may be changed or developed.

    假设给出如下代码模板:

    // 一个异步函数
    function someFun(callback) {}
    
    // 可以传 callback 执行
    someFun(console.log);
    
    // 可以返回 Promise
    someFun().then(console.log);
    

    someFun函数要如何编写才能支持 2 种调用风格呢?

    我写了篇文章进行详细介绍,欢迎拍砖。

    JavaScript: 如何编写一个既支持 Callback 又支持 Promise 风格的函数

    11 replies    2020-09-11 17:02:21 +08:00
    moult
        1
    moult  
       Sep 11, 2020 via iPhone   ❤️ 4
    var a=new promise(...);
    if(callback) a.then(callback) else return a;
    youmoo
        2
    youmoo  
    OP
       Sep 11, 2020
    @moult 可行。不过可以优先 callback, 无 callback 时再 new promise,这样可以省一个 promise 。
    youmoo
        4
    youmoo  
    OP
       Sep 11, 2020
    @zhuangzhuang1988 嗯。很多库或框架都有用到这种风格。
    tikazyq
        5
    tikazyq  
       Sep 11, 2020
    typeof 应该可以解决你的问题
    flowfire
        6
    flowfire  
       Sep 11, 2020
    这。。。。感觉像是 promisify ?
    正常情况就是判断参数是否存在吧
    lovecy
        7
    lovecy  
       Sep 11, 2020
    typof callback === "function"
    tangchi695
        8
    tangchi695  
       Sep 11, 2020
    判断有没有 callback 不就完事儿了吗
    momocraft
        9
    momocraft  
       Sep 11, 2020
    不管有没有 callback 都返回 promise
    如果有 callback 就 then 一份
    lin07hui
        10
    lin07hui  
       Sep 11, 2020
    function someFun(callback) {
    const res = { data: "..." };
    typeof callback === "function" && callback(res);
    return Promise.resolve(res);
    }
    hupo0
        11
    hupo0  
       Sep 11, 2020
    @youmoo 连返回类型都不一样了,最好分开成两个函数
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5775 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 06:29 · PVG 14:29 · LAX 23:29 · JFK 02:29
    ♥ Do have faith in what you're doing.