【发布时间】:2015-03-05 18:23:41
【问题描述】:
function addAccountData(data) {
var queryResults = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;
var key;
var displayProps = decodeURIComponent(getQueryStringParameter("qProps")).split(",");
var keyIndex;
var resultIndexes = [];
for (var i = 0; i < queryResults[0].Cells.results.length; i++) {
key = queryResults[0].Cells.results[i].Key;
keyIndex = displayProps.indexOf(key);
if (keyIndex > -1) {
resultIndexes.push(i);
}
}
var promises = [];
for (var h = 0; h < queryResults.length; h++) {
var cellValues = [];
for (var i = 0; i < resultIndexes.length; i++) {
cellValues.push(queryResults[h].Cells.results[resultIndexes[i]].Value);
}
// getAccountInfo(cellValues);
var deferred = $.Deferred();
//add data from SharePoint Accounts list
if (cellValues[4] != null) {
$.when(getAccountInfo(cellValues)).done(function (data) {
tempResults.push(data);
deferred.resolve(tempResults);
});
}
promises.push(deferred);
}
$.when.apply($,promises).done(function() {
alert('yes');
spinner.stop();
},
function(e) {
console.log("My ajax failed");
});
}
我的 jquery 代码中的这个函数使用延迟对象并承诺解析一个异步函数。定义了一组承诺,并使用.when 和.apply 传递了该数组。但是,在为每个 promise 调用 deferred.resolve 之后,它不会回调 $.when.apply($,promises).done(function() ... ) 中的语句,从未调用过。有人能指出我正确的方向吗?
【问题讨论】:
-
如果不查看更多信息(包括
getAccountInfo()函数),很难判断。此外,没有理由人为地创建您的$.Deferred()对象以存储到您的数组中——只需添加getAccountInfo()的结果,因为这似乎已经返回了一个承诺。
标签: jquery