我一直试图在异步模式下调用多个ajax调用,然后在继续操作之前等待所有ajax调用完成。 我正在使用jquery .when()。
var results_array = [];
var num = 0;
var promises = [];
ldap_cmd_array.forEach(element => {
var myldap = ldap_data;
myldap.push({
"name": "cmd",
"value": element
});
console.log(++num);
promises.push(ajaxCall(myldap, 'aaa',
// success callback
function (data) {
console.log(--num);
results_array.push(data);
console.log('pass');
},
//error callback
function (err) {
//Do nothing
console.log(--num);
console.log('fail');
}
));
});
$.when.apply($, promises)
.then(function() {
console.log(results_array);
});
但是在输出中,我看到在所有ajax调用完成之前,results_array正在打印。我不确定我要去哪里。需要帮忙?预先感谢。
注意:已附加输出图像。
答案 0 :(得分:0)
最后,我能够解决它。 感谢Zim84,您的指针实际上解决了我的问题,鸣谢!
var results_array = [];
var num = 0;
var promises = [];
console.log(ldap_data);
ldap_cmd_array.forEach(element => {
var myldap = ldap_data.slice(); //to copy a javascript object
myldap.push({
"name": "cmd",
"value": element
});
var dObject = new $.Deferred();
console.log(++num);
promises.push(dObject);
ajaxCall(myldap, 'taaa',
// success callback
function (data) {
console.log(--num);
dObject.resolve();
results_array.push(data);
console.log('pass');
},
//error callback
function (err) {
//Do nothing
dObject.resolve();
console.log(--num);
console.log('fail');
}
);
});
$.when.apply($, promises)
.then(function () {
console.log('I should print after all promises');
console.log(results_array);
});
答案 1 :(得分:-2)
Promise.all([ajaxCall1, ..., ajaxCallN]).then(responseArray => {})