Use async in polltask.js

This commit is contained in:
rubenwardy
2023-08-26 13:21:08 +01:00
parent c8a30a27dc
commit 798679ca44

View File

@@ -3,62 +3,62 @@
"use strict"; "use strict";
function getJSON(url, method) {
return new Promise((resolve, reject) => { async function getJSON(url, method) {
fetch(new Request(url, { const response = await fetch(new Request(url, {
method: method || "get", method: method || "get",
credentials: "same-origin", credentials: "same-origin",
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
}, },
})).then((response) => { }));
response.text().then((txt) => {
resolve(JSON.parse(txt)) return await response.json();
}).catch(reject)
}).catch(reject)
})
} }
function pollTask(poll_url, disableTimeout) {
return new Promise((resolve, reject) => {
let tries = 0;
function retry() { function sleep(interval) {
tries++; return new Promise(resolve => setTimeout(resolve, interval));
if (!disableTimeout && tries > 30) { }
reject("timeout")
} else {
const interval = Math.min(tries*100, 1000) async function pollTask(poll_url, disableTimeout) {
console.log("Polling task in " + interval + "ms") let tries = 0;
setTimeout(step, interval)
} while (true) {
tries++;
if (!disableTimeout && tries > 30) {
throw "timeout";
} else {
const interval = Math.min(tries * 100, 1000);
console.log("Polling task in " + interval + "ms");
await sleep(interval);
} }
function step() {
getJSON(poll_url).then((res) => { let res = undefined;
if (res.status === "SUCCESS") { try {
console.log("Got result") res = await getJSON(poll_url);
resolve(res.result) } catch (e) {
} else if (res.status === "FAILURE" || res.status === "REVOKED") { console.error(e);
reject(res.error || "Unknown server error")
} else {
retry()
}
}).catch(retry)
} }
retry()
}) if (res && res.status === "SUCCESS") {
console.log("Got result")
return res.result;
} else if (res && (res.status === "FAILURE" || res.status === "REVOKED")) {
throw res.error ?? "Unknown server error";
}
}
} }
function performTask(url) { async function performTask(url) {
return new Promise((resolve, reject) => { const startResult = await getJSON(url, "post");
getJSON(url, "post").then((startResult) => { console.log(startResult);
console.log(startResult)
if (typeof startResult.poll_url == "string") { if (typeof startResult.poll_url == "string") {
pollTask(startResult.poll_url).then(resolve).catch(reject) return await pollTask(startResult.poll_url);
} else { } else {
reject("Start task didn't return string!") throw "Start task didn't return string!";
} }
}).catch(reject)
})
} }