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在传递数组时需要一个延迟对象。