ramil_bayramov
@ramil_bayramov
Your Personal Sheikh

Как сделать в promise двойной ответ?

подскажите как сделать xhr1 тоже приходил ответ? как promise сделать это? приходить только первый ответ, и на второй вызов отправляет первй ответ

let myPromise = new Promise(function(myResolve, myReject) {
        let xhr = new XMLHttpRequest();
        let xhr1 = new XMLHttpRequest();

        xhr.open(`GET`, `style.css`);
        xhr1.open(`GET`, `xmlData.html`);

        xhr.onload = function () {
            if (xhr.status === 200 && xhr.readyState === 4) {
                myResolve(xhr.responseText);
            }
            else {
                myReject("Error");
            }
        }
        xhr1.onload = function () {
            if (xhr1.status === 200 && xhr1.readyState === 4) {
                myResolve(xhr1.responseText);
            }
            else {
                myReject("Error");
            }
        }
        xhr.send();
        xhr1.send();
    });

    myPromise.then(
        function(value) {console.log(value);}
    );
    myPromise.then(
        function(secondValue) {console.log(secondValue);}
    );

    myPromise.catch(
        function (error) {
            console.log(error);
        }
    )
    myPromise.catch(
        function (error) {
            console.log(error);
        }
    )


5faaf044e20ed855274655.png
  • Вопрос задан
  • 112 просмотров
Решения вопроса 2
Aetae
@Aetae Куратор тега JavaScript
Тлен
Два асинхронных действия - два промиса, по одному на каждое. Объеденить же несколько потом можно через Promise.all:
function XMLHttpPromise(method, url, data) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open(method, url);
    xhr.onload = () => {
      if (xhr.status === 200 && xhr.readyState === 4) 
        resolve(xhr.responseText);
      else 
        reject("Error");
    }
    xhr.onerror = xhr.ontimeout = reject;
    xhr.send(data);
  })
}

Promise.all([
  XMLHttpPromise('GET', `style.css`),
  XMLHttpPromise('GET', `xmlData.html`)
]).then(([value, secondValue]) => {
  console.log(value);
  console.log(secondValue);
}).catch(console.error);
Ответ написан
Комментировать
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
  1. Выбросьте XMLHttpRequest
  2. Используйте fetch
  3. Promise.all([fetch(`style.css`), fetch(`xmlData.html`)]).then( ... оба запроса завершены )

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы