Я планирую использовать async / await для запуска многих задач. Поскольку я не могу позволить себе ждать выполнения задач, потому что основной цикл будет продолжать порождать новые задачи, я должен убедиться, что обещание для этой задачи будет уничтожено в конце. Имеет ли следующий фрагмент кода утечку обещаний? Если есть лучший способ добиться этого, пожалуйста, дайте мне знать.
const fetch = require ('node-fetch')
var gId = 0;
var ps = {}
var lId = gId; gId ++;
ps[lId] = task(lId)
lId = gId; gId ++;
ps[lId] = task(lId)
//will add many more tasks
async function task(id) {
console.log("starting..")
var url = "http://localhost/prod/te.php";
var r1 = await fetch(url).then((r) => r.text())
console.log(new Date() + "|" + id)
await wait(parseInt(r1) * 1000)
var r2 = await fetch(url).then((r) => r.text())
console.log(new Date + "|" + id)
ps[id].then(() => console.log("deleted promise " + id))
delete ps[id]
}
async function wait(ms) {
return new Promise (function (resolve, reject) {
setTimeout(function() {
console.log("expired")
resolve(0)
}, ms)
})
}