36 lines
942 B
JavaScript
36 lines
942 B
JavaScript
![]() |
let inFlightRequest = null;
|
||
|
const inputElement = document.querySelector("#org-input");
|
||
|
const outputElement = document.querySelector("#parse-output");
|
||
|
|
||
|
function abortableFetch(request, options) {
|
||
|
const controller = new AbortController();
|
||
|
const signal = controller.signal;
|
||
|
|
||
|
return {
|
||
|
abort: () => controller.abort(),
|
||
|
ready: fetch(request, { ...options, signal })
|
||
|
};
|
||
|
}
|
||
|
|
||
|
async function renderParseResponse(response) {
|
||
|
console.log(response);
|
||
|
}
|
||
|
|
||
|
inputElement.addEventListener("input", async () => {
|
||
|
let orgSource = inputElement.value;
|
||
|
if (inFlightRequest != null) {
|
||
|
inFlightRequest.abort();
|
||
|
inFlightRequest = null;
|
||
|
}
|
||
|
|
||
|
let newRequest = abortableFetch("/parse", {
|
||
|
method: "POST",
|
||
|
cache: "no-cache",
|
||
|
body: orgSource,
|
||
|
});
|
||
|
inFlightRequest = newRequest;
|
||
|
|
||
|
let response = await inFlightRequest.ready;
|
||
|
renderParseResponse(await response.json());
|
||
|
});
|