jQuery延迟数组没有按预期触发.done()
jQuery deferred array not triggering .done() as expected
我在使用jQuery延迟时有一些麻烦。下面是我的代码:
function makeAjaxCalls(purge){
var deferreds = [];
// delete the documents
_.each(purge, function(element, index, list){
console.log('purging '+element.model+' id='+element.id);
deferreds.push(
$.ajax({
type: 'DELETE',
url: '/API/admin/purge/'+element.model+'/'+element.id
})
);
});
console.log('returning array with '+deferreds.length+' deferreds');
return deferreds;
};
function purgeDeletedDocs(){
console.log('purging...');
var purge = [];
_.each(arrayOfIDs, function(element, index, list){
purge.push({'model': arrayOfModels.get(element).get('modelName'), 'id': element});
}); // [{model: 'modelName', id: 'id'}...]
// when *all* the AJAX calls are resolved run this code
$.when.apply(this, deferreds).done(function(){
console.log('done');
});
var deferreds = makeAjaxCalls(purge);
};
purgeDeletedDocs()
正如你所看到的,我使用$.when.apply
,因为我从makeAjaxCalls()
函数返回一个延迟数组。
这是我在控制台得到的内容:
purging...
done
purging User id=5564e0f647f054512a9d64c9
purging Client id=557079a04407058a49fd2f3d
returning array with 2 deferreds
这很奇怪。在AJAX调用完成之前,我就看到了done
,更不用说解决了。我将this
传递到apply()
,但使用$
等没有区别-并且阅读apply()
的文档,第一个参数只是为代码设置this
,因此这是预期的行为。
服务器正在正确地获得API调用,因此AJAX调用正在进行,只是多个延迟似乎在它们甚至被制作之前就解决并触发.done()
。
你知道我做错了什么吗?
// when *all* the AJAX calls are resolved run this code $.when.apply(this, deferreds).done(function(){ console.log('done'); }); var deferreds = makeAjaxCalls(purge);
正如你所看到的,我正在使用
$.when.apply
,因为我正在返回一个数组从makeAjaxCalls()
函数延迟。
嗯,但是你没有把它们传递给$.when
函数。相反,您将undefined
传递给$.when
,甚至在调用makeAjaxCalls()
之前!
重新排序语句到
var deferreds = makeAjaxCalls(purge);
$.when.apply(this, deferreds).done(function(){
console.log('done');
});
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- javascript中的数组出错
- 如何使用 node.js 比较两个 json 数组
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- 执行请求数组失败,并多次调用Error: done().映射请求数组不会触发请求
- 在http数组上调用done.在Node.js中获取请求
- jQuery延迟数组没有按预期触发.done()
- jquery延期.Done:将数据数组传递给Done方法