Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

Node.js의 async.queue() 메서드

<시간/>

async 모듈은 nodejs 애플리케이션에서 비동기 자바스크립트로 작업할 수 있는 다양한 기능을 제공합니다. async.queue() 메서드는 프로세스의 동시 처리, 즉 한 번에 항목을 여러 번 처리하는 데 추가로 사용되는 대기열을 반환합니다.

async.queue() 설치 및 사용

1단계 − 다음 명령을 실행하여 노드 패키지 관리자를 초기화합니다.

npm init

2단계 − 다음 명령어를 사용하여 async 모듈을 설치합니다.

npm install --save async

3단계 − 프로그램에서 아래 명령문을 사용하여 비동기 모듈 가져오기 .

const async = require('async')

구문

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

매개변수

위의 매개변수는 다음과 같이 설명됩니다 -

  • 기능 – 이 매개변수는 큐에 추가된 요소에 대해 실행될 함수를 정의합니다.

  • 동시 값 – 이 필드는 한 번에 처리할 요소의 수를 정의합니다.

async.queue() 메서드에는 비동기 요청을 처리하는 동안 사용될 여러 메서드와 속성이 있습니다.

  • 푸시(요소, 콜백) - 일반 큐와 마찬가지로 푸시 방식은 큐의 맨 뒤에 요소를 추가하는 데 사용됩니다.

queue.push(item, callback);
  • 길이() - length 메소드는 한 번에 큐에 있는 요소의 수를 반환하는 데 사용됩니다.

queue.length()
  • 시작 속성 - 이 속성은 요소 처리를 시작했는지 여부에 관계없이 대기열에 대한 정보를 제공하는 부울 값을 반환합니다.

queue.started()
  • unshift(요소, 콜백) - unshift 속성은 또한 push() 메서드와 같이 대기열에 요소를 추가합니다. 둘 사이의 유일한 차이점은 – 머리에 요소를 추가하는 반면 푸시는 꼬리에 요소를 추가한다는 것입니다. 이 방법은 우선순위 요소에 사용됩니다.

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

예시

위의 개념을 더 잘 이해하기 위해 한 가지 예를 살펴보겠습니다. −

// 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 !