Обещание не выполняется - PullRequest
0 голосов
/ 07 мая 2020

У меня есть этот код, который не выполняет обещание.

let res = this.#xhttp.onreadystatechange = () => {
    return new Promise((res, rej) => {
      const that = this;
      if (that.#xhttp.readyState == 4 && that.#xhttp.status == 200) {
        res(that.#xhttp.response);
      }
    });
  }

res().then(data => {
  console.log(data);
})

Как мне получить ответ в нужное время?

1 Ответ

2 голосов
/ 07 мая 2020

Вы устанавливаете res для функции , которую вы назначаете onreadystatechange. Вы хотите установить его на обещание.

Код, который вы процитировали, находится на неправильном уровне. Вы хотите создать обещание на более высоком уровне, где вы создаете XMLHttpRequest. Вы не дали мне достаточно кода, чтобы действительно помочь вам в этом, но это будет что-то вроде:

function doARequest(/*...params...*/) {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.onreadystatechange = () => {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    resolve(xhr.response);
                } else {
                    reject(/*...whatever you want to pass, typically an Error...*/);
                }
        };
        xhr.open(/*...arguments...*/);
        // ...
    });
}

Но , в любой неопределенно современной среде просто используйте fetch взамен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...