なんだかGoodVibes

日々の勉強メモです。

【Node】キューの利用(async.queue)

こんにちは。
本日はasync.queueを使ったキューのサンプルの紹介です。


概要

asyncのインストールが必要です。
以下のコマンドでインストールしてください。

npm install async


サンプルコード

pushを使用

pushを使用すると末尾に新しいデータを追加していきます。

const async = require('async');

const q = async.queue((data, callback) => {
    console.log(`data = ${data}, lenght = ${q.length()}, running = ${q.running()}`);

    setTimeout(() => {
        callback(null);
    }, 1000);
});

for (let i = 0; i < 10; i++) {
    q.push(i);
}

結果は以下です。

data = 0, lenght = 9, running = 1
data = 1, lenght = 8, running = 1
data = 2, lenght = 7, running = 1
data = 3, lenght = 6, running = 1
data = 4, lenght = 5, running = 1
data = 5, lenght = 4, running = 1
data = 6, lenght = 3, running = 1
data = 7, lenght = 2, running = 1
data = 8, lenght = 1, running = 1
data = 9, lenght = 0, running = 1


unshiftを使用

unshiftを使用すると最初にデータを追加していきます。

const async = require('async');

const q = async.queue((data, callback) => {
    console.log(`data = ${data}, lenght = ${q.length()}, running = ${q.running()}`);

    setTimeout(() => {
        callback(null);
    }, 1000);
});

for (let i = 0; i < 10; i++) {
    q.unshift(i);
}

結果は以下です。

data = 9, lenght = 9, running = 1
data = 8, lenght = 8, running = 1
data = 7, lenght = 7, running = 1
data = 6, lenght = 6, running = 1
data = 5, lenght = 5, running = 1
data = 4, lenght = 4, running = 1
data = 3, lenght = 3, running = 1
data = 2, lenght = 2, running = 1
data = 1, lenght = 1, running = 1
data = 0, lenght = 0, running = 1

pushを使用したときと逆になっているのがわかりますね。


待機と再開(pause, resume)

pauseとresumeを使って、一定時間待機してから実行開始します。

const async = require('async');

const q = async.queue((data, callback) => {
    console.log(`data = ${data}, lenght = ${q.length()}, running = ${q.running()}`);

    setTimeout(() => {
        callback(null);
    }, 1000);
});

q.pause();
console.log('待機中・・・');
for (let i = 0; i < 10; i++) {
    q.push(i);
}

setTimeout(() => {
    console.log('実行開始!');
    q.resume();
}, 3000);

結果は以下です。

待機中・・・
実行開始!
data = 0, lenght = 9, running = 1
data = 1, lenght = 8, running = 1
data = 2, lenght = 7, running = 1
data = 3, lenght = 6, running = 1
data = 4, lenght = 5, running = 1
data = 5, lenght = 4, running = 1
data = 6, lenght = 3, running = 1
data = 7, lenght = 2, running = 1
data = 8, lenght = 1, running = 1
data = 9, lenght = 0, running = 1



以上です。