XHR Put with Promise разрешается до того, как ошибка 403 будет обнаружена - PullRequest
0 голосов
/ 27 января 2020

Я борюсь с ошибками в моем вызове XHR Put, обернутом Обещанием, поскольку сначала он разрешается с 200, а затем с ошибкой 403 (запрещено) в xhr.onreadystatechange ..

(не знаю, почему сначала возвращается 200, должно было быть только 403) ..

Кто-нибудь из вас знает, как я могу исправить ошибки в этом сценарии?

Вызов XHR

export async function uploadFile(url, file, progressCallback) {
await promiseMinDelay(
    new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();

        xhr.onreadystatechange = () => {
            if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status === 200) {
                    return resolve(true);
                }
                console.log(`FAILED in OnReadyStateChange with : ${xhr.status}`);
                const error = new Error();
                error.status = xhr.status;
                error.response = xhr.response;
                // throw error;
                reject(error);
            }
        };

        xhr.upload.onprogress = (evt) => {
            if (evt.lengthComputable) {
                const percentComplete = parseInt(
                    (evt.loaded / evt.total) * 100,
                    10
                );
                progressCallback(file, percentComplete);
            }
        };

        xhr.upload.onerror = function () {
            console.log('Never reaching this point...');
            const error = new Error('Something failed during upload. Please try again...');
            reject(error);
        };

        xhr.open('PUT', url, true);
        xhr.send(file);
    }),
    2000
);
}

Печатные экраны сетевых вызовов:

первый вызов, который возвращает 200:

enter image description here

второй вызов, который возвращает 403 (никогда не улавливая ошибку).

enter image description here

...