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 чейин тапшырмаларды бир убакта баштайбыз жана ар биринин аяктоосунан кийин кийинкисин баштайбыз, бардык ишке ашканча. Натыйжалар баштапкы тапшырмалардын тартибинде массивде сакталат.