Показать сообщение отдельно
  #1 (permalink)  
Старый 13.09.2018, 14:35
Аватар для kvizor34
Аспирант
Отправить личное сообщение для kvizor34 Посмотреть профиль Найти все сообщения от kvizor34
 
Регистрация: 08.02.2018
Сообщений: 50

Интересная штука с Promise.all
Добрый день.
К примеру, в цикле я создаю массив промисов, которые выполняют 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)
            }
        );

То же можно запустить в консоле.

Кто скажет - в чём дело?
Ответить с цитированием