QuestQueue

صف کارهای ناهمگام با هم‌زمانی محدود. در هر لحظه دست‌بالا simultaneous کار اجرا می‌شود؛ بقیه می‌مانند و با پایان هر کار، جایی خالی پر می‌شود. برای بارگذاری‌ها یا درخواست‌های دسته‌ای به کارش ببرید: هر چیزی که نمی‌توانید یکجا رها کنید.

API

new QuestQueue({ simultaneous })

پارامتر توضیح نوع پیش‌فرض
simultaneous بیشترین هم‌زمانی؛ <= 0 یعنی ۱ number 1
عضو توضیح
add(task) کاری را در صف می‌گذارد و Promise نتیجهٔ خودِ همان کار را می‌دهد. با خالی شدن جا آغاز می‌شود
allSettled(tasks) دسته‌ای را در صف می‌گذارد؛ مانند Promise.allSettled و به ترتیب ورودی برآورده می‌شود
onIdle() می‌ماند تا صف خالی شود
clear() هر چه هنوز آغاز نشده دور می‌ریزد (کارهای در حال اجرا دست‌نخورده می‌مانند)
running / pending / executed / idle شمارنده‌های زنده

نمونه

import { QuestQueue } from 'ranuts';

const queue = new QuestQueue({ simultaneous: 3 });
const results = await Promise.all(urls.map((url) => queue.add(() => fetch(url))));

// یا رها کنید و بروید، سپس چشم‌به‌راه همه بمانید، شکست‌ها هم در میان
urls.forEach((url) => queue.add(() => fetch(url)).catch(report));
await queue.onIdle();

یادداشت‌ها

  1. اولین ورودی، اولین خروجی: کارها به ترتیبی که افزوده شده‌اند اجرا می‌شوند.
  2. یک شکست صف را نمی‌خواباند. هر کار تنها Promise خودش را رد می‌کند و کار بعدی به‌هر‌روی آغاز می‌شود.
  3. کاری که همگام خطا پرتاب کند هم گرفته می‌شود، پس نمی‌تواند از add() بیرون بزند و شمارندهٔ هم‌زمانی را گیر بیندازد.
  4. allSettled ترتیب ورودی را نگه می‌دارد و هر پیامد را جداگانه گزارش می‌کند.