| export type RequestResult = { body: string; status: number }; |
|
|
| |
| |
| |
| |
| export function requestWithUploadDownloadProgress( |
| url: string, |
| method: "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "CONNECT" | "OPTIONS" | "TRACE" | "PATCH", |
| body: string, |
| uploadProgress: (progress: number) => void, |
| downloadOccurring: () => void, |
| ): [Promise<RequestResult>, XMLHttpRequest | undefined] { |
| let xhrValue: XMLHttpRequest | undefined; |
| const promise = new Promise<RequestResult>((resolve, reject) => { |
| const xhr = new XMLHttpRequest(); |
| xhr.upload.addEventListener("progress", (e) => uploadProgress(e.loaded / e.total)); |
| xhr.addEventListener("progress", () => downloadOccurring()); |
| xhr.addEventListener("load", () => resolve({ status: xhr.status, body: xhr.responseText })); |
| xhr.addEventListener("abort", () => resolve({ status: xhr.status, body: xhr.responseText })); |
| xhr.addEventListener("error", () => reject(new Error("Request error"))); |
| xhr.open(method, url, true); |
| xhr.setRequestHeader("accept", "*/*"); |
| xhr.setRequestHeader("accept-language", "en-US,en;q=0.9"); |
| xhr.setRequestHeader("content-type", "application/json"); |
|
|
| xhrValue = xhr; |
|
|
| xhr.send(body); |
| }); |
|
|
| return [promise, xhrValue]; |
| } |
|
|