a = function (){
var o = {}
son(function(){
o.x = 1,
o.y = 2
return o //??
})
return o //??
}
如何让子函数运算完后父函数再返回结果呢?
目前返回的应该是Object {}
我希望得到 Object { x: 1, y: 2 }
本来想简化一下问题,但是看来大家对我简化的问题不太明白,囧~
$.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
里
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
1) RGBaster.colors 是一个异步执行的方法,那么也就是这个函数在其函数体内的同步方法调用完毕后,将回到get_color函数体继续向下执行,不会等待异步方法的执行完成
2)你想
$._.get_color('img')
执行完了后就得到异步执行的结果是不可能的3)你可以换个实现思路,既然是异步的,那么就等RGBaster.colors执行完了,通知你~~嗯,对的,就是使用回调函数
4) promise也是可以的~~~
son();
return o;
从你的程序,不知道
son()
干了啥,只知道son()
需要一个函数作为参数,肯定是在里面调用了这个函数。由于
o
定义在域中,你传入son()
的函数里对o
的属性进行了赋值操作,但是返回的o
却没有相应的属性,估计son()
进行了异步操作。也就是说,在执行时间上,先返回了o
,后进行对传入son()
的函数进行调用。那么,这就需要用 Promise 来解决了。如果
son()
返回的就是一个Promise
对象,那直接返回son()
的结果就好不过这种可能性比较小,而且也不知道
son()
返回的Promise
对象会不会带传入函数的返回值。所以自己用 Promise 来处理好了不过这样仍然有一个问题……那就是
son()
得调用你传入的那个函数,否则永远不会走到p.then
里面去。如果在son里面完成的操作是同步的,则不必在son的函数参数里返回o,直接在执行son之后使用o即可,因为从你的代码来看,son里面的o和son外面的o是对同一个对象的引用。
如果是异步的,则不行,因为son的执行全部完成的时间点往往在外面的return语句之后,所以这个时候应该用回调。
写完后,再看一下你的描述,好像我上面答的不是你问的。“目前返回的应该是Object {} 我希望得到 Object { x: 1, y: 2 }”,为什么说是“应该是”,难道你没有运行过你的代码吗(感觉你在推测)?如果son函数不是异步的,返回结果肯定是Object { x: 1, y: 2 };如果是异步的则肯定是 {} 啊。