Sobes.tech
Middle

//შექმენით ფუნქცია // promiseAllLimit(tasks: Array<() => Promise<unknown>>, limit: number): Promise<any[]>, //რომელიც ახორციელებს დაპირებებს მაქსიმალური ერთდროულ მოთხოვნების რაოდენობის შეზღუდვით.

sobes.tech AI

პასუხი AI-სგან

promiseAllLimit ფუნქცია საშუალებას გაძლევთ დააყენოთ შეზღუდვა ერთდროულად მიმდინარე დაპირებების რაოდენობაზე, რათა შეძლოთ დავალებების (ფუნქციები, რომლებიც აბრუნებენ დაპირებებს) გაშვება. ეს სასარგებლოა, მაგალითად, ქსელის ან API-ს გადატვირთვის თავიდან აცილებისთვის.

შესრულების მაგალითი:

function promiseAllLimit(tasks, limit) {
  return new Promise((resolve, reject) => {
    const results = [];
    let running = 0;
    let index = 0;
    let resolvedCount = 0;

    function runNext() {
      if (resolvedCount === tasks.length) {
        resolve(results);
        return;
      }

      while (running < limit && index < tasks.length) {
        const currentIndex = index;
        const task = tasks[currentIndex];
        index++;
        running++;

        task()
          .then(result => {
            results[currentIndex] = result;
          })
          .catch(err => {
            reject(err);
          })
          .finally(() => {
            running--;
            resolvedCount++;
            runNext();
          });
      }
    }

    runNext();
  });
}

აქ ჩვენ ვიწყებთ მაქსიმუმ limit დავალებას ერთდროულად, და ყოველი დასრულების შემდეგ ვიწყებთ შემდეგს, სანამ ყველა არ დასრულდება. შედეგები ინახება მასივში თავდაპირველი დავალებების წესრიგში.