如何让子函数的结果传给父函数

$.extend($._, {
  get_color: function(pic) {
    d = {}
    RGBaster.colors(pic, {
      success: function(payload) {
        color = payload.secondary[0]
        rgb = color.split(',')
        brightness = (rgb[0] * 30 + rgb[1] * 59 + rgb[2] * 11 + 50) / 255
        brightness < 50 ? d.theme = 'drak' : d.theme = 'light'
        d.bgcolor = 'rgb(' + color + ')'
        console.log(d); //这个结果是我希望返回到get_color中的
      }
    })
  }
}

RGBaster.colors 是一个异步执行的方法

我希望在调用 $._.get_color('img') 时可以返回上方代码中log的结果,然后现在的问题就是怎么把 RGBaster.colors运算后的结果返回到 $._.get_color

阅读 2.4k
1 个回答

没有比较好的方法,像你这样在回调函数中写是比较正常的做法。如果不介意使用 async/await 的话,可以使用 Promise 这么改写一下:

RGBaster._colors = RGBaster.colors;
RGBaster.colors = pic => new Promise(success => RGBaster._colors(pic, {success});

$.extend($._, {
    get_color: async pic => {
        let payload = await RGBaster.colors(pic);
        let d = {
            color: payload.secondary[0],
            bgcolor: `rgb('${payload.secondary[0]}')` 
        };
        
        let rgb = d.color.split(',');
        d.theme = (rgb[0]*30+rgb[1]*59+rgb[2]*11+50)/255 < 50 ? 'dark' : 'light';
        
        console.log(d);
    }
});

另外 $._. 这个莫名的萌啊....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题