Nodejs ngoại lệ chưa được phát hiện
Có một cú pháp đặc biệt để làm việc với các lời hứa một cách thoải mái hơn, được gọi là “async/await”. Nó dễ hiểu và dễ sử dụng một cách đáng ngạc nhiên Chức năng không đồng bộHãy bắt đầu với từ khóa 7. Nó có thể được đặt trước một chức năng, như thế này
Từ "không đồng bộ" trước một chức năng có nghĩa là một điều đơn giản. một hàm luôn trả về một lời hứa. Các giá trị khác được tự động bao bọc trong một lời hứa đã giải quyết Chẳng hạn, hàm này trả về một lời hứa đã giải quyết với kết quả là 8;
…Chúng ta có thể trả lại một lời hứa một cách rõ ràng, điều này sẽ giống nhau
Vì vậy, 7 đảm bảo rằng hàm trả về một lời hứa và bao bọc những điều không hứa hẹn trong đó. Đủ đơn giản, phải không? . Có một từ khóa khác, 0, chỉ hoạt động bên trong các hàm của 7 và nó khá thú vịChờ đợicú pháp ________số 8 Từ khóa 0 khiến JavaScript đợi cho đến khi lời hứa đó hoàn thành và trả về kết quả của nóĐây là một ví dụ với một lời hứa sẽ giải quyết trong 1 giây 0Việc thực thi chức năng "tạm dừng" tại dòng 3 và tiếp tục khi lời hứa ổn định, với 4 trở thành kết quả của nó. Vì vậy, đoạn mã trên hiển thị “xong. ” trong một giâyHãy nhấn mạnh. 0 thực sự tạm dừng việc thực thi chức năng cho đến khi lời hứa được giải quyết, sau đó tiếp tục lại với kết quả lời hứa. Điều đó không tốn bất kỳ tài nguyên CPU nào, bởi vì công cụ JavaScript có thể thực hiện các công việc khác trong thời gian chờ đợi. thực thi các tập lệnh khác, xử lý các sự kiện, v.v.Nó chỉ là một cú pháp tao nhã hơn để nhận được kết quả hứa hẹn hơn là 6. Và, nó dễ dàng hơn để đọc và viếtKhông thể sử dụng Nếu chúng tôi cố gắng sử dụng 0 trong một chức năng không đồng bộ, sẽ có lỗi cú pháp 7Chúng ta có thể gặp lỗi này nếu quên đặt 7 trước một hàm. Như đã nêu trước đó, 0 chỉ hoạt động bên trong hàm 7Hãy lấy ví dụ về 2 từ chương Promises chain và viết lại nó bằng cách sử dụng 3
6Khá sạch sẽ và dễ đọc, phải không? Các trình duyệt hiện đại cho phép Trong các trình duyệt hiện đại, 0 ở cấp cao nhất chỉ hoạt động tốt khi chúng tôi ở trong một mô-đun. Chúng tôi sẽ đề cập đến các mô-đun trong bài viết Mô-đun, giới thiệuVí dụ 9Nếu chúng tôi không sử dụng các mô-đun hoặc các trình duyệt cũ hơn phải được hỗ trợ, thì sẽ có một công thức chung. gói vào một chức năng không đồng bộ ẩn danh Như thế này 0
Giống như 6, 0 cho phép chúng ta sử dụng các đối tượng có thể gọi được (những đối tượng có phương thức 02 có thể gọi được). Ý tưởng là một đối tượng của bên thứ ba có thể không phải là một lời hứa, nhưng tương thích với lời hứa. nếu nó hỗ trợ 4, thế là đủ để sử dụng nó với 0Đây là một lớp 05 demo; 9Nếu 0 nhận một đối tượng không hứa hẹn với 4, thì nó gọi phương thức đó cung cấp các hàm tích hợp sẵn 09 và 70 làm đối số (giống như đối với trình thực thi 71 thông thường). Sau đó, 0 đợi cho đến khi một trong số chúng được gọi (trong ví dụ trên, nó xảy ra ở dòng 3) rồi tiếp tục với kết quảPhương thức lớp không đồng bộ Để khai báo một phương thức lớp không đồng bộ, chỉ cần thêm vào trước nó bằng 7 0Ý nghĩa là như nhau. nó đảm bảo rằng giá trị được trả về là một lời hứa và cho phép 0xử lý lỗiNếu một lời hứa giải quyết bình thường, thì 76 trả về kết quả. Nhưng trong trường hợp bị từ chối, nó sẽ báo lỗi, giống như có một câu lệnh 77 tại dòng đómã này 1…cũng giống như thế này 2Trong các tình huống thực tế, lời hứa có thể mất một thời gian trước khi từ chối. Trong trường hợp đó sẽ có độ trễ trước khi 0 đưa ra lỗiChúng tôi có thể phát hiện lỗi đó bằng cách sử dụng 79, giống như cách sử dụng 77 thông thường 3Trong trường hợp có lỗi, điều khiển sẽ nhảy đến khối 61. Chúng tôi cũng có thể bọc nhiều dòng 4Nếu chúng ta không có 79, thì lời hứa được tạo bởi lệnh gọi hàm async 63 sẽ bị từ chối. Chúng ta có thể nối thêm 64 để xử lý nó 5Nếu chúng tôi quên thêm 64 vào đó, thì chúng tôi sẽ gặp lỗi lời hứa chưa được xử lý (có thể xem được trong bảng điều khiển). Chúng ta có thể phát hiện những lỗi như vậy bằng cách sử dụng trình xử lý sự kiện toàn cầu 66 như được mô tả trong chương Xử lý lỗi bằng lời hứa
Khi chúng tôi sử dụng 3, chúng tôi hiếm khi cần đến 4, vì 0 xử lý việc chờ đợi cho chúng tôi. Và chúng ta có thể sử dụng 79 thông thường thay vì 64. Điều đó thường (nhưng không phải luôn luôn) thuận tiện hơnNhưng ở cấp cao nhất của mã, khi chúng tôi ở bên ngoài bất kỳ hàm 7 nào, chúng tôi không thể sử dụng 0 về mặt cú pháp, do đó, thông thường là thêm 96 để xử lý kết quả cuối cùng hoặc lỗi rơi xuống, như trong dòng
Khi chúng ta cần đợi nhiều lời hứa, chúng ta có thể gói chúng trong 99 và sau đó là 0 6Trong trường hợp có lỗi, nó sẽ lan truyền như bình thường, từ fail promise thành 99, rồi trở thành một ngoại lệ mà chúng ta có thể bắt gặp bằng cách sử dụng 79 xung quanh cuộc gọiBản tóm tắtTừ khóa 7 trước hàm có hai tác dụng
Từ khóa 0 trước một lời hứa làm cho JavaScript đợi cho đến khi lời hứa đó ổn định, rồi sau đó
Họ cùng nhau cung cấp một khuôn khổ tuyệt vời để viết mã không đồng bộ, dễ đọc và viết Với 3, hiếm khi chúng ta cần viết 68, nhưng chúng ta vẫn không nên quên rằng chúng dựa trên những lời hứa, bởi vì đôi khi (e. g. trong phạm vi ngoài cùng), chúng ta phải sử dụng các phương pháp này. Ngoài ra, 99 thật tuyệt khi chúng tôi đang chờ đợi nhiều nhiệm vụ cùng một lúc |