మాడ్యూల్ పాఠాలు (4/4)
సవాలు: వాగ్దానాలతో షెడ్యూల్ చేయడం
"షెడ్యూలింగ్" అంటే అసింక్ టాస్క్ల జాబితాను ఎలా అమలు చేయాలో నిర్ణయించడం: అన్నీ కలిసి, ఒక సమయంలో,
లేదా చిన్న సమూహాలలో. మేము Promise.all, for await, మరియు మూసివేతలను కలుపుతాము.
సమాంతరంగా: అన్నీ కలిసి
పనులు స్వతంత్ర మరియు వేగంగా ఉన్నప్పుడు, వాటన్నింటినీ ప్రారంభించి, Promise.allతో వేచి ఉండండి:
async function inParallelo(tasks) {
return Promise.all(tasks.map((t) => t()));
}
const risultati = await inParallelo([
() => Promise.resolve(1),
() => Promise.resolve(2),
() => Promise.resolve(3),
]);
// [1, 2, 3]నెమ్మదైన టాస్క్ యొక్క మొత్తం సమయం ≈ సమయం.
సిరీస్లో: ఒక్కోసారి
ప్రతి పని మునుపటిదానిపై ** ఆధారపడి ఉన్నప్పుడు లేదా మీరు రేట్-పరిమితిని కోరుకున్నప్పుడు:
async function inSerie(tasks) {
const risultati = [];
for (const t of tasks) {
risultati.push(await t());
}
return risultati;
}సమయాల మొత్తం సమయం ≈ మొత్తం.
ఏకకాల పరిమితితో
కొన్నిసార్లు మీరు వెయ్యి ఏకకాల అభ్యర్థనలను కోరుకోరు, కానీ మీరు వాటి కోసం వేచి ఉండకూడదు సిరీస్ గాని: మీరు విమానంలో ** గరిష్టంగా N కావాలి**.
async function conLimite(tasks, n) {
const risultati = new Array(tasks.length);
let i = 0;
async function worker() {
while (i < tasks.length) {
const mio = i++;
risultati[mio] = await tasks[mio]();
}
}
await Promise.all(Array.from({ length: n }, worker));
return risultati;
}ఆలోచన: మీరు n "కార్మికులను" ప్రారంభించండి, వారు ఏమీ మిగిలి ఉండనంత వరకు తదుపరి సూచికను పొందుతారు.
దీనిని ప్రయత్నించండి
`ఇన్సిరీస్(టాస్క్లు)` అసమకాలీకరణను నిర్వచించండి: వాగ్దానాలను తిరిగి ఇచ్చే ఫంక్షన్ల శ్రేణిని అందించండి, వాటిని ఒక్కొక్కటిగా అమలు చేయండి (వేచి ఉండండి) మరియు ఫలితాల శ్రేణిని అమలు క్రమంలో అందించండి.
సూచనను చూపించు
కోసం ... యొక్క మరియు పుష్(వెయిట్ t())
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
`inParallel(tasks)` asyncని నిర్వచించండి: వాగ్దానాలను తిరిగి ఇచ్చే ఫంక్షన్ల శ్రేణిని అందించండి, వాటిని అన్నింటినీ సమాంతరంగా ప్రారంభించండి మరియు ఇన్పుట్ వలె అదే క్రమంలో ఫలితాల శ్రేణిని అందించండి. Promise.all ఉపయోగించండి.
సూచనను చూపించు
Promise.all(tasks.map((t) => t()))
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది