Update http.js.

This commit is contained in:
voussoir 2022-10-12 18:41:19 -07:00
parent 2bd8f42eb0
commit 415e474da5
No known key found for this signature in database
GPG key ID: 5F7554F8C26DACCB

View file

@ -8,27 +8,30 @@ http.request_queue = {};
http.request_queue.array = []; http.request_queue.array = [];
http.request_queue.push = http.request_queue.push =
function request_queue_push(func) function request_queue_push(func, kwargs)
{ {
const delay = ((! kwargs) ? 0 : kwargs["delay"]) || 0;
http.request_queue.array.push(func) http.request_queue.array.push(func)
if (http.requests_in_flight == 0) setTimeout(http.request_queue.next, 0);
{
http.request_queue_next();
}
} }
http.request_queue.unshift = http.request_queue.pushleft =
function request_queue_unshift(func) function request_queue_pushleft(func, kwargs)
{ {
http.request_queue.array.unshift(func) http.request_queue.array.unshift(func)
if (http.requests_in_flight == 0) setTimeout(http.request_queue.next, 0);
}
http.request_queue.clear =
function request_queue_clear()
{
while (http.request_queue.array.length > 0)
{ {
http.request_queue_next(); http.request_queue.array.shift();
} }
} }
http.request_queue.pushleft = http.request_queue.unshift;
http.request_queue_next = http.request_queue.next =
function request_queue_next() function request_queue_next()
{ {
if (http.requests_in_flight > 0) if (http.requests_in_flight > 0)
@ -68,9 +71,23 @@ function _request(kwargs)
/* /*
Perform an HTTP request and call the `callback` with the response. Perform an HTTP request and call the `callback` with the response.
Required kwargs:
url
Optional kwargs:
with_credentials: goes to xhr.withCredentials
callback
asynchronous: goes to the async parameter of xhr.open
headers: an object fully of {key: value} that will get added as headers in
addition to those in the global http.HEADERS.
data: the body of your post request. Can be a FormData object, a string,
or an object of {key: value} that will get automatically turned into
a FormData.
The response will have the following structure: The response will have the following structure:
{ {
"meta": { "meta": {
"id": a large random number to uniquely identify this request.
"request": the XMLHttpRequest object, "request": the XMLHttpRequest object,
"completed": true / false, "completed": true / false,
"status": If the connection failed or request otherwise could not "status": If the connection failed or request otherwise could not
@ -95,6 +112,7 @@ function _request(kwargs)
const request = new XMLHttpRequest(); const request = new XMLHttpRequest();
const response = { const response = {
"meta": { "meta": {
"id": Math.random() * Number.MAX_SAFE_INTEGER,
"request": request, "request": request,
"completed": false, "completed": false,
"status": 0, "status": 0,
@ -122,7 +140,7 @@ function _request(kwargs)
http.requests_in_flight -= 1; http.requests_in_flight -= 1;
setTimeout(http.request_queue_next, 0); setTimeout(http.request_queue_next, 0);
if (kwargs["callback"] == null) if (! (kwargs["callback"]))
{ {
return; return;
} }