如何从延迟对象返回函数
How to return a function from a deferred object
我有一个函数,它传递了一个URL列表(在本例中是一个json文件列表),为每个资源进行异步ajax调用,一旦调用完成,就会返回一个包含内容的对象。
function loadModels(modelList){
var modelObject = {}
for(model in modelList){
var urlPath = modelList[model].indexOf(".json") > -1 ? 'model/'+modelList[model]+'json' : 'model/'+modelList[model]+'.json';
$.ajax(urlPath).done(function(jsonData){
modelObject[modelList[model]] = jsonData;
});
}
console.log(modelObject);
return modelObject;
}
问题是,控制台总是记录Object{},因为函数在延迟对象解析之前返回。如果我设置async: false
,那么它工作得很好,但我不希望请求彼此等待。
如何强制函数在返回之前等待,并且仍然异步调用?
编辑:链接中的延迟解决方案不是一个足够完整的答案。我遇到的问题与关闭有关。这是工作代码块:
function loadModels(modelList, callback){
var promises = [];
for(model in modelList){
(function(){
var currentModel = modelList[model];
var urlPath = currentModel.indexOf(".json") > -1 ? 'model/'+currentModel+'json' : 'model/'+currentModel+'.json';
var promise = $.ajax(urlPath);
log('pulling model: ' + currentModel);
promise.done(function(jsonData){
modelObject[currentModel] = jsonData;
log('model pulled: ' + currentModel);
});
promises.push(promise);
})();
}
$.when.apply(null, promises).done(function() {
callback(modelObject);
});
}
您可以使用jQuery.when()
等待所有承诺得到解决,然后再继续。。。
var promises = [];
for(model in modelList){
var urlPath = modelList[model].indexOf(".json") > -1 ? 'model/'+modelList[model]+'json' : 'model/'+modelList[model]+'.json';
var promise = $.ajax(urlPath);
promises.push(promise);
promise.done(function(jsonData){
modelObject[modelList[model]] = jsonData;
});
}
$.when.apply(null, promises).done(function() {
console.log(modelObject);
});
当最后一个ajax完成的事件完成时,触发一个事件并将对象传递给事件数据
以及您需要数据处理该事件的位置。
$.event.trigger({
type: "afterMyAjaxDone",
data: MyDataObject
});
$(document).on('afterMyAjaxDone', function (e) {
var MyDataObject = e.data;
}
相关文章:
- 使用返回函数sinde.attr()jquery元素
- 从自执行函数返回函数的Javascript性能命中率
- Node Express Handlebars帮助程序未返回函数的结果
- 未在Firefox中执行PageMethod的返回函数
- 对返回函数的函数感到困惑
- 从承诺返回不返回函数会导致警告
- 从函数返回函数而不调用返回的函数
- Javascript,闭包中的返回函数如何与外部函数连接
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 对象函数返回函数而不是值
- 从外部函数(数组)了解返回函数(x)
- 从Javascript类对象返回函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用依赖注入在 JavaScript 中返回函数
- 通过单击JSP和javascript加载两个返回函数
- 需要说明:无法理解返回函数的javascript
- 简单的onClick返回函数不起作用
- 为什么这个闭包返回函数
- JS函数返回函数供以后使用-未定义参数
- Coffeescription类中的方法返回函数而不是字符串