Reality123b's picture
Update application/static/js/components/request.js
d012552 verified
// application/static/js/components/request.js
class Request {
constructor() {
}
async request(method, url, headers = {}, payload = null, stream = false) {
try {
const response = await fetch(url, {
method: method,
headers: headers,
body: payload
});
if (!response.ok) {
// It's good practice to handle non-OK responses.
throw new Error(`Request failed: ${response.status} - ${await response.text()}`);
}
if (stream) {
return this.handleStream(response); // This is correct
} else {
// Create an async generator that yields the entire body as a single chunk.
return (async function*() {
const text = await response.text();
yield text;
})(); // Immediately-invoked function expression (IIFE)
}
} catch (error) {
console.error("Request error:", error); // Log the error
throw error; // Re-throw the error so the caller can handle it
}
}
async *handleStream(response) {
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
const chunk = decoder.decode(value, { stream: true });
yield chunk;
}
}
}
const requests = new Request();
export default requests;