Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

Node.jsのasync.queue()メソッド


非同期モジュールは、nodejsアプリケーションで非同期JavaScriptを操作するためのさまざまな機能を提供します。 async.queue()メソッドは、プロセスの同時処理、つまり一度に/瞬時にアイテムを複数処理するためにさらに使用されるキューを返します。

async.queue()のインストールと使用

ステップ1 −次のコマンドを実行して、ノードパッケージマネージャーを初期化します。

npm init

ステップ2 −次のコマンドを使用して非同期モジュールをインストールします。

npm install --save async

ステップ3 −プログラムで以下のステートメントを使用して非同期モジュールをインポートします。

const async = require('async')

構文

async.queue('function', 'concurrency value')

パラメータ

上記のパラメータは以下のように記述されます-

  • 機能 –このパラメーターは、キューに追加された要素に対して実行される関数を定義します。

  • 同時実行値 –このフィールドは、一度に処理される要素の数を定義します。

async.queue()メソッドには、非同期リクエストの処理中に使用される複数のメソッドとプロパティがさらにあります。

  • push(element、callback)- 通常のキューと同様に、プッシュメソッドはキューの末尾に要素を追加するために使用されます。

queue.push(item, callback);
  • length()- lengthメソッドは、一度にキューに存在する要素の数を返すために使用されます。

queue.length()
  • 開始プロパティ- このプロパティは、要素の処理を開始したかどうかに関係なく、キューに関する情報を提供するブール値を返します。

queue.started()
  • unshift(element、callback)- unshiftプロパティは、push()メソッドのようにキューに要素を追加します。 2つの違いは、ヘッドに要素を追加するのに対し、プッシュはテールに要素を追加することだけです。このメソッドは優先要素に使用されます。

queue.unshift(item, callback)
  • drain()メソッド- このメソッドは、キューがすべてのタスク/要素を実行したときにコールバックを発行します。関数が矢印関数で記述されている場合にのみ機能します。

queue.drain(() => {
   console.log(“All Tasks are completely executed...”);
}
  • pause()メソッド このメソッドは、キュー内の残りの要素の実行を保持します。この関数は、resume()が呼び出された後も続行されます。

queue.pause()
  • resume()メソッド- このメソッドは、pause()メソッドを使用して保留にされた要素の実行を再開するために使用されます。

queue.resume()
  • kill()メソッド- このメソッドは、キューから残りのすべての要素を削除し、キューを強制的にアイドル状態にします。

queue.kill()
  • idle()メソッド- このメソッドは、キューがアイドル状態であるか何かを処理しているかを示すブール状態を返します。

queue.idle

上記の概念をよりよく理解するために、1つの例を見てみましょう-

// Including the async module
const async = require('async');

// Creating an array for all elements execution
const tasks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// Initializing the queue
const queue = async.queue((task, executed) => {
   console.log("Currently Busy Processing Task " + task);

   setTimeout(()=>{
      // Number of tasks remaining and to be processed
      const tasksRemaining = queue.length();
      executed(null, {task, tasksRemaining});
   }, 1000);

}, 1); // concurrency value = 1

// Queue is idle initially as no elements are there...
console.log(`Queue Started ? ${queue.started}`)

// Adding each task from the tasks list
tasks.forEach((task)=>{

   // Adding the task 5 to the head for priority execution
   if(task == 5){
      queue.unshift(task, (error, {task, tasksRemaining})=>{
         if(error){
            console.log(`An error occurred while processing task ${task}`);
         }else {
            console.log(`Finished processing task ${task}. ${tasksRemaining} tasks remaining`);
         }
      })
      // Adding all the tasks at tail to be executed except task 5
   } else {
      queue.push(task, (error, {task, tasksRemaining})=>{
         if(error){
            console.log(`An error occurred while processing task ${task}`);
         }else {
            console.log(`Finished processing task ${task}. ${tasksRemaining}
            tasks remaining`);
         }
      })
   }
});

// Executes the callback when the queue is done processing all the tasks
queue.drain(() => {
   console.log('All items are succesfully processed !');
})

// Checking if the queue is started after adding tasks
console.log(`Queue Started ? ${queue.started}`)

出力

C:\home\node>> node asyncQueue.js
Queue Started ? False
Queue Started ? True
Currently Busy Processing Task 5
Finished processing task 5. 9 tasks remaining
Currently Busy Processing Task 1
Finished processing task 1. 8 tasks remaining
Currently Busy Processing Task 2
Finished processing task 2. 7 tasks remaining
Currently Busy Processing Task 3
Finished processing task 3. 6 tasks remaining
Currently Busy Processing Task 4
Finished processing task 4. 5 tasks remaining
Currently Busy Processing Task 6
Finished processing task 6. 4 tasks remaining
Currently Busy Processing Task 7
Finished processing task 7. 3 tasks remaining
Currently Busy Processing Task 8
Finished processing task 8. 2 tasks remaining
Currently Busy Processing Task 9
Finished processing task 9. 1 tasks remaining
Currently Busy Processing Task 10
Finished processing task 10. 0 tasks remaining
All items are succesfully processed !

  1. C#のQueue.CopyTo()メソッド

    C#のQueue.CopyTo()メソッドは、指定された配列インデックスから開始して、Queue要素を既存の1次元配列にコピーするために使用されます。 構文 構文は次のとおりです- public virtual void CopyTo (Array arr, int index); 上記のパラメータarrは、キューからコピーされた要素の宛先である1次元配列です。インデックスパラメータは、コピーが開始される配列内のゼロベースのインデックスです。 例 例を見てみましょう- using System; using System.Collections.Generic; public class

  2. C#のQueue.Synchronized()メソッド

    C#のQueue.Synchronized()メソッドは、元のキューをラップし、スレッドセーフな新しいキューを返すために使用されます。 構文 構文は次のとおりです- public static System.Collections.Queue Synchronized (System.Collections.Queue queue); 上記のパラメータキューは、同期するキューです。 例 例を見てみましょう- using System; using System.Collections; public class Demo {    public static void