mirror of
https://github.com/minetest/contentdb.git
synced 2024-12-22 22:12:24 +01:00
Use async in polltask.js
This commit is contained in:
parent
c8a30a27dc
commit
798679ca44
@ -3,62 +3,62 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
function getJSON(url, method) {
|
||||
return new Promise((resolve, reject) => {
|
||||
fetch(new Request(url, {
|
||||
|
||||
async function getJSON(url, method) {
|
||||
const response = await fetch(new Request(url, {
|
||||
method: method || "get",
|
||||
credentials: "same-origin",
|
||||
headers: {
|
||||
"Accept": "application/json",
|
||||
},
|
||||
})).then((response) => {
|
||||
response.text().then((txt) => {
|
||||
resolve(JSON.parse(txt))
|
||||
}).catch(reject)
|
||||
}).catch(reject)
|
||||
})
|
||||
}));
|
||||
|
||||
return await response.json();
|
||||
}
|
||||
|
||||
function pollTask(poll_url, disableTimeout) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let tries = 0;
|
||||
|
||||
function retry() {
|
||||
tries++;
|
||||
if (!disableTimeout && tries > 30) {
|
||||
reject("timeout")
|
||||
} else {
|
||||
const interval = Math.min(tries*100, 1000)
|
||||
console.log("Polling task in " + interval + "ms")
|
||||
setTimeout(step, interval)
|
||||
}
|
||||
function sleep(interval) {
|
||||
return new Promise(resolve => setTimeout(resolve, interval));
|
||||
}
|
||||
|
||||
|
||||
async function pollTask(poll_url, disableTimeout) {
|
||||
let tries = 0;
|
||||
|
||||
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) => {
|
||||
if (res.status === "SUCCESS") {
|
||||
console.log("Got result")
|
||||
resolve(res.result)
|
||||
} else if (res.status === "FAILURE" || res.status === "REVOKED") {
|
||||
reject(res.error || "Unknown server error")
|
||||
} else {
|
||||
retry()
|
||||
}
|
||||
}).catch(retry)
|
||||
|
||||
let res = undefined;
|
||||
try {
|
||||
res = await getJSON(poll_url);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
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) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getJSON(url, "post").then((startResult) => {
|
||||
console.log(startResult)
|
||||
if (typeof startResult.poll_url == "string") {
|
||||
pollTask(startResult.poll_url).then(resolve).catch(reject)
|
||||
} else {
|
||||
reject("Start task didn't return string!")
|
||||
}
|
||||
}).catch(reject)
|
||||
})
|
||||
async function performTask(url) {
|
||||
const startResult = await getJSON(url, "post");
|
||||
console.log(startResult);
|
||||
|
||||
if (typeof startResult.poll_url == "string") {
|
||||
return await pollTask(startResult.poll_url);
|
||||
} else {
|
||||
throw "Start task didn't return string!";
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user