backend-and-orchestration-t.../code/protocol_demos/long-polling/index.js
2023-07-15 13:01:58 -07:00

36 lines
No EOL
965 B
JavaScript

const app = require("express")();
const jobs = {}
app.post("/submit", (req, res) => {
const jobId = `job:${Date.now()}`
jobs[jobId] = 0;
updateJob(jobId,0);
res.end("\n\n" + jobId + "\n\n");
})
app.get("/checkstatus", async (req, res) => {
console.log(jobs[req.query.jobId])
//long polling, don't respond until done
while(await checkJobComplete(req.query.jobId) == false);
res.end("\n\nJobStatus: Complete " + jobs[req.query.jobId] + "%\n\n")
} )
app.listen(8080, () => console.log("listening on 8080"));
async function checkJobComplete(jobId) {
return new Promise( (resolve, reject) => {
if (jobs[jobId] < 100)
this.setTimeout(()=> resolve(false), 1000);
else
resolve(true);
})
}
function updateJob(jobId, prg) {
jobs[jobId] = prg;
console.log(`updated ${jobId} to ${prg}`)
if (prg == 100) return;
this.setTimeout(()=> updateJob(jobId, prg + 10), 10000)
}