Добрый день.
К примеру, в цикле я создаю массив промисов, которые выполняют get запрос, и на каждой итерации немного меняется url запроса.
var arr = [];
for (let i=1; i<=10; i++){
arr[i] = new Promise((resolve,reject)=>{
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/users/'+i, true);
xhr.onload = function() {
if (this.status === 200) {
resolve(this.response);
} else {
var error = new Error(this.statusText);
error.code = this.status;
reject(error);
}
};
xhr.onerror = function() {
reject(new Error("Network Error"));
};
xhr.send();
});
}
Promise.all(arr).then(
(resolve) => {
console.log("Ответ сервера: " + resolve)
},
(reject) => {
console.log("Ошибка: " + reject)
}
);
Этот код работает, можете прям в консоли браузера запустить.
Но если вместо стандартного XHR использовать $.ajax, почему то работать всё перестаёт (если быть точным, вместо объектов в консоль выводится их стандартный метод toString - [object Object]):
var arr = [];
for (let i=1; i<=10; i++){
arr[i] = new Promise((resolve,reject)=>{
$.ajax({
url: 'https://jsonplaceholder.typicode.com/users/'+i,
success: function (data) {
resolve(data);
},
error: function (jqXHR, textStatus) {
reject(textStatus);
}
})
});
}
Promise.all(arr).then(
(resolve) => {
console.log("Ответ сервера: " + resolve)
},
(reject) => {
console.log("Ошибка: " + reject)
}
);
То же можно запустить в консоле.
Кто скажет - в чём дело?