मेरे पास एचटीएमएल 5 कैनवास में समानांतर में प्रस्तुत करने के लिए कुछ सैकड़ों चीजें हैं। इन्हें समानांतर में Promise.all कॉल में खींचा जाता है। अब, मैं जानना चाहता हूं कि इनमें से कौन सा वादा पूरा होने वाला आखिरी है।


// get a promise that will resolve in between 0 and 5 seconds.
function resolveAfterSomeTime(): Promise<void> {
    return new Promise((resolve) => setTimeout(resolve, Math.random() * 5000));
}

const myPromises = [];
for (let i = 0; i < 100; i++) {
    myPromises.push(resolveAfterSomeTime);
}

Promise.all(myPromises).then(() => {
    // find out which promise was the last to resolve.
})

मेरे मामले में, मेरे पास प्रत्येक render() फ़ंक्शन के साथ कई कक्षाएं हैं। इनमें से कुछ दूसरों की तुलना में भारी हैं, लेकिन मैं जानना चाहता हूं कि कौन से हैं।

मेरे पास इन पंक्तियों के साथ कुछ है, और मैं जानना चाहता हूं कि कौन सा वादा हल करने में सबसे धीमा है, ताकि मैं इसे अनुकूलित कर सकूं।

2
Marche Remi 18 अप्रैल 2021, 02:44

2 जवाब

सबसे बढ़िया उत्तर

यहाँ एक तरीका है जहाँ प्रत्येक वादा हल करने के बाद lastPromiseToResolve का मान सेट करता है। हल करने का आखिरी वादा इसे कायम रखेगा।


// get a promise that will resolve in between 0 and 5 seconds.
function resolveAfterSomeTime(): Promise<void> {
    return new Promise((resolve) => setTimeout(resolve, Math.random() * 5000));
}

let lastPromiseToResolve = null
const myPromises = [];
for (let i = 0; i < 100; i++) {
    const promise = resolveAfterSomeTime()
    myPromises.push(promise.then(() => {
        lastPromiseToResolve = promise // all the promises will set lastPromiseToResolve
    }));
}

Promise.all(myPromises).then(() => {
  console.log(lastPromiseToResolve) // this would be the last promise to resolve
})
4
richytong 17 अप्रैल 2021, 23:54

सबसे अच्छा तरीका मैं सोच सकता हूं कि अब तक हल किए गए वादों की संख्या को इंगित करने वाले काउंटर का उपयोग करना है:

function resolveAfterSomeTime() {
  return new Promise((resolve) => setTimeout(resolve, Math.random() * 5000));
}

const myPromises = [];
let resolveCount = 0;
for (let i = 0; i < 100; i++) {
  myPromises.push(
    resolveAfterSomeTime()
      .then(() => {
        resolveCount++;
        if (resolveCount === 100) {
          console.log('all resolved');
          console.log('array item', i, 'took longest');
        }
      })
  );
}
4
CertainPerformance 17 अप्रैल 2021, 23:49