3.0.7 • Published 2 years ago

best-queue v3.0.7

Weekly downloads
69
License
MIT
Repository
-
Last release
2 years ago

license downloads size issues npm

English|简体中文

Introduction

best-queue let you control tasks in a queue.

It's easy to execute task one by one with interval time in queue like this:

Queue -> task -> wait(interval) -> task -> wait(interval) -> task -> finish

How about adding async task in queue:

Queue -> Promise.resolve(task) -> wait(interval) -> Promise.resolve(task) -> wait(interval) -> Promise.resolve(task) -> finish

What if we want to execute two tasks at the same time to support concurrency in queue:

Queue -> Promise.all([Promise.resolve(task), Promise.resolve(task)]) -> wait(interval) -> Promise.all([Promise.resolve(task), Promise.resolve(task)]) -> wait(interval) -> Promise.all([Promise.resolve(task), Promise.resolve(task)]) -> finish

But if one async task takes too much time because of network reason, the batch of task need to wait until the slow task resolve, we can do something make queue more efficient in theory.

That's best-queue do. See image below.

npm.io

Install

type in the command line to install with:

npm i best-queue

Usage

Import as an ES Module:

import { createQueue } from "best-queue";

Require in Node:

const { createQueue } = require("best-queue");

Use Script source(Exposed BQueue as global var):

<script src="https://cdn.jsdelivr.net/npm/best-queue"></script>
<script src="https://unpkg.com/best-queue"></script>

API

Attribute/MethodDescriptionTypeDefault
createQueuecreate a queue(tasks: unkonwn[], options: Options) => Promise
optionscreate a queue by optionsObject{max: 1, interval: 0,recordError: false}
options.maxmax concurrence task at the same time, default and min to 1Number1
options.intervalthe interval time between tow tasks(milliscond), default to 0Number0
options.recordErrorrecord error task instead of reject queue when task gone errorBooleanfalse
pause()pause the queue, queue stop to execute taskFunction(): void
resume()rerun the queueFunction(): void
subscribe(listener: Listener)listener fired a task doneFunction(({taskStatus: 'success' | 'error', data: unknown, taskIndex: number, progress: number}) => void): () => void

Example

import { createQueue } from "best-queue";

// simulate async task
function asyncTask() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(1);
    }, 1000);
  });
}

const asyncTasks = [asyncTask, asyncTask];

/**
 * createQueue returns enhanced promise
 */
const queue = createQueue(asyncTasks, {
  max: 1,
  interval: 1 * 1000,
  recordError: false,
});

queue.then((result) => {
  console.log(result);
});

const unsubscribe = queue.subscribe(({ taskIndex }) => {
  // queue will be paused after first task
  taskIndex === 0 && queue.pause();
});

setTimeout(() => {
  // queue paused after first task done, it will rerun the queue
  queue.resume();
}, 1500);

Lisence

Copyright (c) 2020 Jacano Licensed under the MIT license.

3.0.7

2 years ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.6

2 years ago

3.0.5

2 years ago

3.0.2

3 years ago

3.0.2-beta.3

3 years ago

3.0.2-beta.2

3 years ago

3.0.2-beta.1

3 years ago

3.0.1

3 years ago

3.0.0-beta.1

3 years ago

3.0.0

3 years ago

2.0.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.1.7

3 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago