Computer >> Máy Tính >  >> Lập trình >> Javascript

Phương thức async.queue () trong Node.js

Mô-đun không đồng bộ cung cấp các chức năng khác nhau để hoạt động với JavaScript không đồng bộ trong ứng dụng nodejs. Phương thức async.queue () trả về một hàng đợi được sử dụng thêm để xử lý đồng thời các quy trình, tức là xử lý nhiều mục tại một thời điểm / tức thì.

Cài đặt và sử dụng async.queue ()

Bước 1 - Chạy lệnh sau để khởi tạo trình quản lý gói nút.

npm init

Bước 2 - Cài đặt mô-đun không đồng bộ bằng lệnh sau.

npm install --save async

Bước 3 - Nhập mô-đun không đồng bộ bằng cách sử dụng câu lệnh dưới đây trong chương trình của bạn.

const async = require('async')

Cú pháp

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

Tham số

Các thông số trên được mô tả như bên dưới -

  • chức năng - Tham số này xác định hàm sẽ được thực thi trên phần tử được thêm vào hàng đợi.

  • giá trị đồng thời - Trường này xác định số phần tử được xử lý tại một thời điểm.

Phương thức async.queue () còn có nhiều phương thức và thuộc tính sẽ được sử dụng trong khi xử lý các yêu cầu không đồng bộ.

  • push (phần tử, gọi lại) - Tương tự như một hàng đợi thông thường, phương thức push được sử dụng để thêm một phần tử vào cuối hàng đợi.

queue.push(item, callback);
  • length () - Phương thức length được sử dụng để trả về số lượng phần tử có trong hàng đợi tại một thời điểm.

queue.length()
  • thuộc tính bắt đầu - Thuộc tính này trả về một giá trị boolean cung cấp thông tin về hàng đợi cho dù nó đã bắt đầu xử lý các phần tử của nó hay chưa.

queue.started()
  • unshift (phần tử, gọi lại) - Thuộc tính unshift cũng thêm một phần tử vào hàng đợi giống như một phương thức push (). Sự khác biệt duy nhất giữa cả hai là - Nó thêm các yếu tố ở đầu trong khi push thêm nó vào đuôi. Phương pháp này được sử dụng cho các phần tử ưu tiên.

queue.unshift(item, callback)
  • Phương thức dra () - Phương thức này đưa ra một cuộc gọi lại khi hàng đợi đã thực thi tất cả các tác vụ / phần tử. Nó chỉ hoạt động khi hàm được mô tả trong hàm mũi tên.

queue.drain(() => {
   console.log(“All Tasks are completely executed...”);
}
  • Phương thức pause () Phương thức này giữ việc thực thi các phần tử còn lại trong hàng đợi. Hàm sẽ tiếp tục sau khi lệnh resume () được gọi.

queue.pause()
  • Phương thức resume () - Phương thức này được sử dụng để tiếp tục thực thi các phần tử đã bị tạm dừng bằng phương thức pause ().

queue.resume()
  • Phương thức kill () - Phương thức này loại bỏ tất cả các phần tử còn lại khỏi hàng đợi và buộc nó ở trạng thái nhàn rỗi.

queue.kill()
  • Phương thức nhàn rỗi () - Phương thức này trả về một trạng thái boolean cho biết liệu hàng đợi có đang không hoạt động hoặc đang xử lý thứ gì đó hay không.

queue.idle

Ví dụ

Hãy xem một ví dụ để hiểu rõ hơn các khái niệm trên -

// 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}`)

Đầu ra

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 !