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 !