Middle+
Ինչու՞ պետք է promiseAll-ի իրականացման ժամանակ հենվել հաշվողական count-ի վրա, այլ ոչ թե պարզապես ստուգել արդյունքների զանգվածի երկարությունը։
sobes.tech AI
Պատասխան AI-ից
Promise.all-ի իրականացման ժամանակ, հնարավոր չէ պարզապես ստուգել արդյունքների զանգվածի երկարությունը, քանի որ խոստումները կարող են ավարտվել ցանկացած հերթականությամբ, և որոշները կարող են ավարտվել սխալով ավելի շուտ, քան մյուսները:
count հաշվիչը ավելանում է միայն այն ժամանակ, երբ խոստումը հաջողությամբ ավարտվում է, ինչը թույլ է տալիս ճշգրիտ հետևել, թե քանի խոստում արդեն կատարվել է։ Եթե միայն ստուգեինք արդյունքների զանգվածի երկարությունը, կարող էինք սխալմամբ կարծել, որ բոլոր խոստումները ավարտվել են, նույնիսկ եթե որոշները դեռ ընթացքի մեջ են կամ տեղի է ունեցել սխալ:
Օրինակ՝
function promiseAll(promises) {
return new Promise((resolve, reject) => {
const results = [];
let count = 0;
promises.forEach((p, i) => {
Promise.resolve(p)
.then(value => {
results[i] = value;
count++;
if (count === promises.length) {
resolve(results);
}
})
.catch(err => reject(err));
});
});
}
Այստեղ, count-ը ապահովում է, որ մենք սպասում ենք բոլոր խոստումների ավարտին, ոչ միայն արդյունքների զանգվածում տարրերի առկայությանը։