我有一个使用两个ajax调用的函数,以获取正确的信息:
var getUsers = function() {
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js", function(foo) {
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js", function(bar) {
return foo['age'] = bar.type;
});
});
}
一个调用当前函数的外部函数,只有在调用完成后才会继续。
getUsers().then(function(result) {
// ...
});
现在奇怪的是,如果我显示结果,那么' age'将显示在控制台中,但如果我尝试使用result['age']
访问它,它将返回undefined。
是否有正确的方法来处理多个延期通话?
答案 0 :(得分:2)
修改您可以将getJSON()
返回的内容链接起来,而不是使用单独的延迟
var getUsers = function() {
var foo;
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
.then(function(data) {
foo = data;
return $.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
}).then(function(bar) {
foo['age'] = bar.type;
return foo;
});
}
注意:您需要保存第一次通话时的返回值,否则第二次通话无法访问。
后代的原始代码
您可以使用jQuery Deferred对象并返回
var getUsers = function() {
var dfd = $.Deferred();
$.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
.done(function(foo) {
$.getJSON("http://codepen.io/chriscoyier/pen/EAIJj.js")
.done(function(bar) {
foo['age'] = bar.type;
dfd.resolve(foo);
}).fail(function(e) {
dfd.reject(e);
})
}).fail(function(e) {
dfd.reject(e);
});
return dfd.promise();
}
http://codepen.io/anon/pen/pvwqZo
延迟对象不会解决,直到两个请求都成功(如果任何一个请求失败,将会失败)。