0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(Node.js) better-queueモジュールを理解する

Last updated at Posted at 2024-09-24

はじめに

node.jsのコードの中でbetter-queueモジュールを使用する機会があったので、どのようなモジュールであるのか簡単にまとめたいと思います。

better-queueモジュールとは

Node.js環境で使用されるジョブ(タスク)キューを提供するためのモジュールです。主に、複数の非同期タスクを効率的に処理し、同時に実行されるタスク数を制御したい場合に便利です。シンプルかつ柔軟な設計で、並列処理、再試行、失敗時の処理、タスクの永続化などの機能をサポートします。

サンプルコード

better-queue.js
const Queue = require("better-queue");

// キューの処理
const queue = new Queue((task, cb) => {
  console.log(`Processing task: ${task.name}`);

  // 非同期処理
  setTimeout(() => {
    if (task.name === "Task 2") {
      console.error("An error occurred in Task 2");
      cb(true); // エラーが発生したことを通知
    } else {
      console.log(`Task ${task.name} complete`);
      cb(); // 成功を通知
    }
  }, 1000);
});

// タスクをキューに追加
queue.push({ name: "Task 1" });
queue.push({ name: "Task 2" });
queue.push({ name: "Task 3" });

・const Queue = require('better-queue');
better-queueライブラリを読み込んで、Queueクラスを使用できるようにしています。このクラスは、タスクのキューを管理するためのメインのインターフェースです。

・const queue = new Queue((task, cb) => {
ここで新しいキューqueueを作成しています。Queue()コンストラクタに渡している引数は、タスクの処理方法を定義するコールバック関数です。この関数は、キューからタスクを1つ取り出して実行する際に呼び出されます。つまりはこの関数は、(task,cb) => {}のことです。
taskはキューに追加されたタスクのオブジェクトを表し、cbはそのタスクが完了したことを通知するためのコールバック関数です。

・setTimeout(() => {
setTimeout()を使って非同期処理をシミュレートしています。実際にはこの部分で時間がかかるような処理(例えば、ファイルの読み書きやAPIの呼び出し)が行われます。

・if (task.name === 'Task 2') {
console.error('An error occurred in Task 2');
cb(true);
}
タスク名がTask 2だった場合、エラーを発生させてcb(true)を呼び出し、エラーが発生したことをキューに通知しています。

・else {
console.log(Task ${task.name} complete);
cb();
}
それ以外のタスクでは、cb()を呼んでタスクが正常に完了したことを通知しています。

・queue.push({ name: 'Task 1' });
queue.push({ name: 'Task 2' });
queue.push({ name: 'Task 3' });
queue.push()メソッドを使って、タスクをキューに追加しています。それぞれのタスクはnameというプロパティを持つオブジェクトです。
Task 1、Task 2、Task 3の順番でキューに追加されており、キューが1つずつタスクを処理していきます。

動作フロー

  1. Task 1の処理を開始し、1秒後に完了。
  2. Task 2の処理を開始し、1秒後にエラーが発生。
  3. Task 3の処理を開始し、1秒後に完了。

実行結果

スクリーンショット 2024-09-24 15.04.16.png

キューに追加された順番通りに実行されています。console.error()の部分が赤字で表示されています。

まとめ

node.jsのbetter-queueモジュールの使用方法についてまとめました。このモジュールは他にも色々な使い方が出来ると思いますので、いずれ追記するかもしれません。

Reference

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?