Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 完成延迟后从函数返回jquery_Javascript_Jquery_Deferred - Fatal编程技术网

Javascript 完成延迟后从函数返回jquery

Javascript 完成延迟后从函数返回jquery,javascript,jquery,deferred,Javascript,Jquery,Deferred,我正在处理以下函数,我希望确保在执行所有这些行后函数返回: var cinfo = iClassInfo.instance().iClassById(nObject.dclass, true); 现在函数返回时不执行此行,因此nObject.mClassName始终未定义。提前谢谢 getObj : function(options) { var self = this, $master = $.Deferred(), $deferreds = [];

我正在处理以下函数,我希望确保在执行所有这些行后函数返回:

var cinfo = iClassInfo.instance().iClassById(nObject.dclass, true);
现在函数返回时不执行此行,因此nObject.mClassName始终未定义。提前谢谢

getObj : function(options) {        
    var self = this,
    $master = $.Deferred(),
    $deferreds = [];
    return self._wt.getIterativeResults({       
        storage: self._str,
        resSetName: self._resultSetName,
        startIndex: options.startIndex,
        endIndex: options.endIndex,
        idForm: 1           
    }).then(
        function(objects){              
            var nObjects = [];
            $.each(objects, function(i,object){                 
                var nObject = object.nObject;
                if(nObject.dclass != null) {
                    var $deferred = iClassInfo.instance().$intializedDef;
                    $deferreds.push($deferred);
                    $deferred.done(function(deferreddone){
                        var cinfo = iClassInfo.instance().iClassById(nObject.dclass, true);
                        if(cinfo != null) {
                            nObject.mClassName = cinfo.name;
                        }
                    });
                }                                       
                nObject.pp = object.npp;
                nObjects.push(nObject);
            });
            $.when($deferreds).done(function(){
                $master.resolve(nObjects);
            });
            return $master.promise();
        },
        function(resp) {
        }
    );
},

您如何将
$deferreds
数组与
$一起使用时出现问题。请尝试使用when()

getObj: function (options) {
    var self = this,
        $master = $.Deferred(),
        $deferreds = [];
    return self._wt.getIterativeResults({
        storage: self._str,
        resSetName: self._resultSetName,
        startIndex: options.startIndex,
        endIndex: options.endIndex,
        idForm: 1
    }).then(function (objects) {
        var nObjects = [];
        $.each(objects, function (i, object) {
            var nObject = object.nObject;
            if (nObject.dclass != null) {
                var $deferred = iClassInfo.instance().$intializedDef;
                $deferreds.push($deferred);
                $deferred.done(function (deferreddone) {
                    var cinfo = iClassInfo.instance().iClassById(nObject.dclass, true);
                    if (cinfo != null) {
                        nObject.mClassName = cinfo.name;
                    }
                });
            }
            nObject.pp = object.npp;
            nObjects.push(nObject);
        });
        //there was a problem here
        $.when.apply($, $deferreds).done(function () {
            $master.resolve(nObjects);
        });
    }, function (resp) {
        $master.reject();
    });
    return $master.promise();
}

在异步函数中不能这样做。。。我可以修改它吗?这样调用者就可以确保只有在异步函数调用成功完成后,它才能访问返回的值吗?非常感谢Arun,这个解决方案可以工作!!我猜问题是,$.when在传递数组时需要一个延迟对象。