Trình tạo Node.js & So sánh với Gọi lại

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Trình tạo và sự khác biệt của chúng với Gọi lại

Máy phát điện là gì?

Các máy phát điện đã trở nên khá nổi tiếng trong Node.js trong thời gian gần đây và đó có thể là do những gì chúng có khả năng làm được.

  • Trình tạo là việc thực thi chức năng có thể bị tạm dừng và tiếp tục lại sau đó.
  • Trình tạo rất hữu ích khi thực hiện các khái niệm như 'thực thi lười biếng'. Về cơ bản, điều này có nghĩa là bằng cách tạm ngừng thực thi và tiếp tục theo ý muốn, chúng ta chỉ có thể kéo các giá trị khi cần.

Máy phát điện có 2 phương pháp chính dưới đây

  1. Phương thức lợi nhuận - Phương thức lợi nhuận được gọi trong một hàm để tạm dừng việc thực thi hàm tại dòng cụ thể nơi phương thức lợi nhuận được gọi.
  2. Phương thức tiếp theo - Phương thức này được gọi từ ứng dụng chính để tiếp tục thực thi một hàm có phương thức lợi nhuận. Việc thực thi hàm sẽ tiếp tục cho đến phương thức lợi nhuận tiếp theo hoặc cho đến khi kết thúc phương thức.

Hãy xem một ví dụ về cách sử dụng máy phát điện.

Trong ví dụ của chúng tôi, chúng tôi sẽ có một hàm Add đơn giản sẽ thêm 2 số, nhưng chúng tôi sẽ tiếp tục tạm dừng việc thực thi phương thức tại các điểm khác nhau để giới thiệu cách sử dụng trình tạo.

function* Add(x) {yield x + 1;var y = yield(null);y = 6return x + y;}var gen = Add(5);gen.next();gen.next();

Giải thích mã: -

  1. Bước đầu tiên là xác định "chức năng" của trình tạo của chúng ta. Lưu ý rằng điều này được thực hiện bằng cách thêm dấu "*" vào từ khóa hàm. Sau đó, chúng ta đang định nghĩa một hàm có tên là Add lấy tham số là x.
  2. Từ khóa lợi nhuận là một từ khóa cụ thể cho máy phát điện. Điều này làm cho nó trở thành một cấu trúc mạnh mẽ để tạm dừng một chức năng ở giữa bất kỳ thứ gì. Vì vậy, ở đây, việc thực thi hàm sẽ bị tạm dừng cho đến khi chúng ta gọi hàm next (), sẽ được thực hiện trong Bước 4. Tại thời điểm này, giá trị của x sẽ trở thành 6 và việc thực hiện hàm sẽ bị dừng lại.
  3. Đây là nơi đầu tiên chúng ta gọi hàm tạo và gửi giá trị 5 vào hàm Thêm của chúng ta. Giá trị này sẽ được thay thế trong tham số x của hàm Add của chúng tôi.
  4. Khi chúng ta gọi hàm next (), hàm Add () sẽ tiếp tục thực thi. Khi câu lệnh tiếp theo var y = output (null) được thực thi, hàm Add () sẽ lại ngừng thực thi.
  5. Bây giờ sau khi gọi lại hàm next (), các câu lệnh tiếp theo sẽ chạy và giá trị kết hợp của x = 5 và y = 6 sẽ được thêm vào và trả về.

Gọi lại so với trình tạo

Máy phát điện được sử dụng để giải quyết vấn đề của những gì được gọi là địa ngục gọi lại. Đôi khi các hàm gọi lại được lồng vào nhau trong quá trình phát triển ứng dụng Node.js đến nỗi việc sử dụng các hàm gọi lại trở nên quá phức tạp.

Đây là nơi mà máy phát điện rất hữu ích. Một trong những ví dụ phổ biến nhất của điều này là khi tạo các chức năng hẹn giờ.

Hãy xem ví dụ dưới đây về cách trình tạo có thể chứng minh là hữu ích qua các lệnh gọi lại.

Ví dụ của chúng tôi sẽ chỉ tạo một hàm trì hoãn thời gian đơn giản. Sau đó, chúng tôi muốn gọi hàm này kết hợp độ trễ 1000, 2000 và 3000 ms.

Bước 1) Xác định chức năng gọi lại của chúng tôi với mã thời gian trễ cần thiết.

function Timedelay(ptime, callback) {setTimeout(function() {callback("Pausing for " + ptime);}, time);}

Giải thích mã: -

  1. Ở đây chúng ta đang tạo một hàm có tên là Timedelay với một tham số là ptime. Điều này sẽ mất khoảng thời gian trì hoãn cần thiết mà chúng tôi muốn giới thiệu trong ứng dụng của mình.
  2. Bước tiếp theo là chỉ cần tạo một thông báo, thông báo này sẽ được hiển thị cho người dùng nói rằng ứng dụng sẽ bị tạm dừng trong nhiều số mili giây này.

Bước 2) Bây giờ chúng ta hãy xem mã nếu chúng ta đã kết hợp các lệnh gọi lại. Giả sử chúng ta muốn kết hợp các lệnh gọi lại dựa trên giá trị 1000, 2000 và 3000 mili giây, đoạn mã dưới đây cho thấy cách chúng ta cần triển khai các lệnh gọi lại này bằng cách sử dụng lệnh gọi lại.

Timedelay(1000, function(message) {console.log(msg);Timedelay(2000, function(message) {console.log(msg);Timedelay(3000, function(message) {console.log(msg);})})})

Giải thích mã: -

  1. Chúng tôi đang gọi Thời gian là một cuộc gọi lại với giá trị là 1000.
  2. Tiếp theo, chúng ta muốn gọi lại hàm Timedelay với giá trị là 2000.
  3. Cuối cùng, chúng ta muốn gọi lại hàm Timedelay với giá trị là 3000.

Từ đoạn mã trên, bạn có thể thấy rằng nó trở nên lộn xộn hơn khi chúng ta muốn bắt đầu gọi hàm nhiều lần.

Bước 3) Bây giờ chúng ta hãy xem làm thế nào để thực hiện cùng một mã bằng cách sử dụng trình tạo. Từ đoạn mã dưới đây, bây giờ bạn có thể thấy việc triển khai chức năng Timedelay bằng cách sử dụng máy phát điện đã trở nên đơn giản như thế nào.

function* Messages() {console,log(yield(Timedelay(1000, function(){})));console,log(yield(Timedelay(2000, function(){})));console,log(yield(Timedelay(3000, function(){})));}

Giải thích mã: -

  1. Trước tiên, chúng tôi xác định một hàm tạo sẽ được sử dụng để gọi hàm Timedelay của chúng tôi.
  2. Chúng tôi đang gọi hàm Yield cùng với hàm Timedelay với giá trị tham số là 1000.
  3. Sau đó, chúng ta đang gọi hàm Yield cùng với hàm Timedelay với 2000 là giá trị tham số.
  4. Cuối cùng, chúng ta đang gọi hàm Yield cùng với hàm Timedelay với 3000 là giá trị tham số.

Tóm lược

Trình tạo cũng có thể được sử dụng để giảm bớt các vấn đề với các lệnh gọi lại lồng nhau và hỗ trợ loại bỏ những gì được gọi là địa ngục gọi lại. Máy phát điện được sử dụng để tạm dừng quá trình xử lý một hàm. Điều này được thực hiện bằng cách sử dụng phương thức 'sản lượng' trong hàm không đồng bộ.

thú vị bài viết...