【发布时间】:2015-05-19 22:52:53
【问题描述】:
我正在尝试使用一个函数通过 3 个 ajax 调用来初始化数据,当这个函数完成后,我想对数据做一些事情。我必须等待完成 3 次 ajax 调用才能返回承诺。问题是,如果我等待完成 3 个 ajax 调用(使用 $.when (ajax1, ajax2, ajax3).done(...)),我会收到错误“无法读取未定义的属性 'then'”
这是我的代码
function myInit() {
initData().then(function() {
console.log("a");
});
}
function initData() {
var results = {
categories: [],
commandes: [],
users: []
};
var ajaxCategories = $.ajax({
url: url + '/categorie/getAll',
success: function(data) {
results.categories = data;
}
});
var ajaxCommandes = $.ajax({
url: url + '/statistique/getSimpleCommandes',
success: function(data) {
results.commandes = data;
}
});
var ajaxUsers = $.ajax({
url: url + '/statistique/getSimpleUsers',
success: function(data) {
results.users = data;
}
});
$.when(ajaxUsers, ajaxCommandes, ajaxCategories)
.done(function() {
results.commandes.forEach(function(commande) {
results.users.forEach(function(user) {
if (user.id == commande.user)
commande.user = user.nom;
});
});
return $.Deferred().resolve();
});
}
我在 $.when 中返回了一个承诺。如果我将此返回移到时间之外,它可以正常工作,但是我冒着退出函数并在未加载数据的情况下继续我的代码的风险。我的错在哪里?
【问题讨论】:
-
我在
initData中看不到任何return-initData()确实不返回承诺。 -
如果你想从回调中
return,你需要使用.then而不是.done。 -
在寻求帮助时,请花时间确保您的代码具有可读性和合理的格式。以上不是。 编辑:不是,我已经为你修好了。
-
谢谢,我真的想知道为什么当我尝试编辑它时它已经修复了