Javascript 延迟嵌套函数的返回值

Javascript 延迟嵌套函数的返回值,javascript,jquery,Javascript,Jquery,我正在编写一个缓存函数,将不可见的内容加载到DOM中,以便正确计算div大小(包括图像)。缓存完成后,我将使用jQuery的延迟对象运行函数 我遇到的问题是,缓存功能完成后,我无法确定如何返回我的道具对象。底部的return props显然是我想要返回属性对象的地方,但它返回的是未定义的,因为调用返回时_obj函数尚未完成 底部的complete函数正确记录了道具对象(包括cacheHeightvar),但我无法确定如何从延迟函数返回道具对象。我想做一些类似于return\u obj(内容).d

我正在编写一个缓存函数,将不可见的内容加载到DOM中,以便正确计算div大小(包括图像)。缓存完成后,我将使用jQuery的延迟对象运行函数

我遇到的问题是,缓存功能完成后,我无法确定如何返回我的道具对象。底部的
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)