LINUX.ORG.RU

История изменений

Исправление Syncro, (текущая версия) :

а насчет хттп клиента, в большинстве случаев кажется достаточно обертки на промисах для того же XMLHttpRequest, типа вот такой

export class XmlHttpClient extends HttpClientBase {

 
    request(url, type = 'GET', contentType, body, headers) {
        return new Promise((resolve, reject) => {
            let xhr = new XMLHttpRequest();
            xhr.open(type, url);
            if (contentType !== ARG_CONTENT_TYPE_AUTO) {
                xhr.setRequestHeader(HEADER_CONTENT_TYPE, contentType ? contentType : CONTENT_TYPE_JSON);
            }
            if (this.auth && this.auth.type === AUTH_TYPE_BASIC) {
                xhr.setRequestHeader(HEADER_AUTHORIZATION, "Basic " + btoa(this.auth.username + ':' + this.auth.password));
            }
            if (this.headers && typeof this.headers === 'object') {
                for (let headerName of Object.keys(this.headers)) {
                    xhr.setRequestHeader(headerName, this.headers[headerName]);
                }
            }
            if (headers && typeof headers === 'object') {
                for (let headerName of Object.keys(headers)) {
                    xhr.setRequestHeader(headerName, headers[headerName]);
                }
            }
            if (! ResLoader.isInIE()) {
                xhr.responseType = 'json';
            }
            xhr.onreadystatechange = (event) => {
                let request = event.target;
                if (request.readyState === XMLHttpRequest.DONE) {
                    if (request.status === 200) {
                        resolve(request);
                    } else {
                        reject(request);
                    }
                }
            };
            if (body) {
                xhr.send(body);
            } else {
                xhr.send();
            }
        });
    }
 
}

библиотеки могут быть удобными, но обычно они имеют особенности и добавляют их в процессы, ну типа неспособности fetch’a ловить ошибки

Исходная версия Syncro, :

а насчет хттп клиента, в большинстве случаев кажется достаточно обертки на промисах для того же XMLHttpRequest, типа вот такой

export class XmlHttpClient extends HttpClientBase {
 
    //auth;
    //headers;
 
    request(url, type = 'GET', contentType, body, headers) {
        return new Promise((resolve, reject) => {
            let xhr = new XMLHttpRequest();
            xhr.open(type, url);
            if (contentType !== ARG_CONTENT_TYPE_AUTO) {
                xhr.setRequestHeader(HEADER_CONTENT_TYPE, contentType ? contentType : CONTENT_TYPE_JSON);
            }
            if (this.auth && this.auth.type === AUTH_TYPE_BASIC) {
                xhr.setRequestHeader(HEADER_AUTHORIZATION, "Basic " + btoa(this.auth.username + ':' + this.auth.password));
            }
            if (this.headers && typeof this.headers === 'object') {
                for (let headerName of Object.keys(this.headers)) {
                    xhr.setRequestHeader(headerName, this.headers[headerName]);
                }
            }
            if (headers && typeof headers === 'object') {
                for (let headerName of Object.keys(headers)) {
                    xhr.setRequestHeader(headerName, headers[headerName]);
                }
            }
            if (! ResLoader.isInIE()) {
                xhr.responseType = 'json';
            }
            xhr.onreadystatechange = (event) => {
                let request = event.target;
                if (request.readyState === XMLHttpRequest.DONE) {
                    if (request.status === 200) {
                        resolve(request);
                    } else {
                        reject(request);
                    }
                }
            };
            if (body) {
                xhr.send(body);
            } else {
                xhr.send();
            }
        });
    }
 
}

библиотеки могут быть удобными, но обычно они имеют особенности и добавляют их в процессы, ну типа неспособности fetch’a ловить ошибки