Javascript 延迟嵌套函数的返回值
我正在编写一个缓存函数,将不可见的内容加载到DOM中,以便正确计算div大小(包括图像)。缓存完成后,我将使用jQuery的延迟对象运行函数 我遇到的问题是,缓存功能完成后,我无法确定如何返回我的道具对象。底部的Javascript 延迟嵌套函数的返回值,javascript,jquery,Javascript,Jquery,我正在编写一个缓存函数,将不可见的内容加载到DOM中,以便正确计算div大小(包括图像)。缓存完成后,我将使用jQuery的延迟对象运行函数 我遇到的问题是,缓存功能完成后,我无法确定如何返回我的道具对象。底部的return props显然是我想要返回属性对象的地方,但它返回的是未定义的,因为调用返回时_obj函数尚未完成 底部的complete函数正确记录了道具对象(包括cacheHeightvar),但我无法确定如何从延迟函数返回道具对象。我想做一些类似于return\u obj(内容).d
return props
显然是我想要返回属性对象的地方,但它返回的是未定义的,因为调用返回时_obj函数尚未完成
底部的complete函数正确记录了道具对象(包括cacheHeightvar),但我无法确定如何从延迟函数返回道具对象。我想做一些类似于return\u obj(内容).done(完成)代码>,但显然它返回的是延迟对象,而不是完整函数的返回
cache : function(content) {
// Vars
var props;
// Deferred switch
var r = $.Deferred();
/*
* Cache object
*/
var _obj = function(content) {
cacheHeight = 0;
cache = document.createElement("div");
cache.style.visibility = "hidden";
$(cache).css("position", "fixed"); // prevents parent's size being affected
$(cache).append(content);
$(contentWrapper).append(cache);
children = $(cache).children();
// Image loader
var imgs = $(cache).find('img'),
img_length = imgs.length,
img_load_cntr = 0;
if (img_length) { //if the $img_container contains new images.
imgs.on('load', function() { //then we avoid the callback until images are loaded
img_load_cntr++;
if (img_load_cntr == img_length) {
remaining = children.length;
$.each(children, function(index, value) {
--remaining;
cacheHeight = cacheHeight + parseInt($(value).outerHeight(false));
if (remaining == 0) {
props = {
height : cacheHeight
}
r.resolve();
}
});
}
});
}
return r;
};
/*
* Return cached object data
*/
var complete = function () {
console.log(props); // Correctly logs props object
};
// Resolve when finished
_obj(content).done(complete);
console.log(props); // Logs props as undefined (not good)
// Return?!?!
return props;
}
如果将函数作为回调传递到缓存参数以访问props变量,该怎么办。我想知道您是否在设置道具之前返回道具。调用resolve时,它可以接受参数,因此您应该这样调用它:
r.resolve(args);
然后“完成”将自动将其传输到您的回调:
/*
* Return cached object data
*/
var complete = function (args) {
//use args as you see fit
ready = true;
};
有关更多详细信息:感谢您的输入。这里的问题是,我已经可以在完整函数中接收props对象,因为我已经全局设置了它。由于完整函数在延迟调用准备就绪时运行,它始终具有正确的值,因此我只想从父(缓存)函数返回props对象,使整个缓存方法延迟,并在prop就绪时解决它-请准确阅读问题,我已经说过,它返回未定义,因为调用返回时_obj函数尚未完成@Fatman-返回嵌套函数中的对象仍然会遇到同样的问题。我需要检索它以用于脚本中的其他函数,因此我的缓存对象将为我提供用于ajax内容加载的数据(在本例中为元素高度)。再次,使缓存函数延迟并返回带有结果的值,与函数内部的操作相同。因此,不要返回prop,而是返回一个延迟对象,并在complete
函数中执行def.resolve(prop)