Lời hứa là một cách để xử lý các hoạt động không đồng bộ trong JavaScript. Nó đại diện cho giá trị của một hoạt động không đồng bộ. Các lời hứa đã được đưa ra để giải quyết vấn đề thực hiện và xử lý mã không đồng bộ trước các lời hứa chúng tôi đang sử dụng các cuộc gọi lại
Sự cố với phương pháp này nếu chúng tôi có một thao tác không đồng bộ khác bên trong cuộc gọi lại và một thao tác khác. Chúng ta sẽ có một đoạn mã lộn xộn và không thể đọc được. Mã này được gọi là Địa ngục gọi lại
Nếu chúng tôi sử dụng lời hứa trong mã này, nó sẽ dễ đọc hơn, dễ hiểu và dễ bảo trì hơn
Lời hứa có 3 trạng thái khác nhau
Đang chờ xử lý - Trạng thái ban đầu của một lời hứa. Kết quả của lời hứa vẫn chưa được biết vì hoạt động chưa được hoàn thành
Đã thực hiện — Thao tác không đồng bộ đã hoàn tất và thành công với giá trị kết quả
Bị từ chối — Thao tác không đồng bộ không thành công và có lý do tại sao không thành công
Đã giải quyết - Nếu lời hứa đã được thực hiện hoặc bị từ chối
Hàm tạo Promise có hai tham số lần lượt là các hàm resolve
và reject
.
Nếu thao tác không đồng bộ đã hoàn tất mà không có lỗi, hãy gọi hàm resolve
để giải quyết lời hứa hoặc nếu xảy ra lỗi
hãy gọi hàm reject
và chuyển lỗi hoặc lý do .
Chúng tôi có thể truy cập kết quả của lời hứa đã thực hiện bằng phương thức .then
và chúng tôi phát hiện lỗi trong phương thức .catch
. Chúng tôi xâu chuỗi nhiều hoạt động của lời hứa không đồng bộ trong phương thức .then
vì phương thức .then
trả về một Lời hứa giống như ví dụ trong hình e ở trên.
Chúng ta có thể tạo một hàm trợ giúp để chuyển đổi một hoạt động không đồng bộ với một cuộc gọi lại thành lời hứa. Nó hoạt động giống như chức năng tiện ích promisify từ mô-đun lõi nút.
Câu hỏi số 2. Văn bản mẫu là gì?
Mẫu chữ là một cách mới để tạo chuỗi trong JavaScript. Chúng tôi có thể tạo Mẫu chữ bằng cách sử dụng ký hiệu backtick hoặc back-quote
Trong phiên bản ES5, chúng ta cần thoát khỏi '
bằng cách sử dụng resolve
0 để thoát khỏi chức năng thông thường của ký hiệu đó, trong trường hợp này là hoàn thành giá trị chuỗi đó. Trong Template Literals, chúng ta không cần phải làm điều đó
Trong phiên bản ES5, chúng tôi cần thêm resolve
1 này để có một dòng mới trong chuỗi của chúng tôi. Trong Template Literals, chúng ta không cần phải làm điều đó
In the ES5 version, If we need to add an expression or value in a string we need to use the + or string concatenation operator. In Template Literals, we can embed an expression using ${expr} which makes it cleaner than the ES5 version.
Câu hỏi số 3. Phá hủy đối tượng là gì?Phá hủy đối tượng là một cách mới và rõ ràng hơn để nhận hoặc trích xuất các giá trị từ một đối tượng hoặc một mảng
Giả sử chúng ta có một đối tượng trông như thế này
Cách cũ để lấy các thuộc tính từ một đối tượng là chúng ta tạo một biến có cùng tên với thuộc tính của đối tượng. Cách này hơi rắc rối vì chúng tôi đang tạo một biến mới cho mọi thuộc tính. Hãy tưởng tượng chúng ta có một đối tượng lớn với rất nhiều thuộc tính và phương thức sử dụng cách này để trích xuất các thuộc tính sẽ rất khó chịu
1
Nếu chúng ta sử dụng phá hủy đối tượng, nó sẽ sạch hơn và mất một ít thời gian hơn so với cách cũ. Cú pháp để phá hủy đối tượng là nếu chúng ta lấy các thuộc tính trong một đối tượng, chúng ta sử dụng resolve
2 và bên trong đó, chúng ta chỉ định các thuộc tính mà chúng ta muốn trích xuất và nếu chúng ta lấy dữ liệu từ một mảng, chúng ta sử dụng resolve
3
Nếu chúng ta muốn thay đổi tên biến mà chúng ta muốn trích xuất, chúng ta sử dụng cú pháp resolve
4. Trong ví dụ này, giá trị của biến resolve
5 sẽ giữ giá trị của thuộc tính resolve
6 và biến resolve
7 sẽ giữ giá trị của thuộc tính resolve
8
Chúng ta cũng có thể có các giá trị mặc định khi phá hủy. Trong ví dụ này, nếu thuộc tính resolve
6 giữ giá trị reject
0 trong đối tượng thì khi chúng ta hủy cấu trúc, biến resolve
6 sẽ giữ giá trị mặc định là reject
2
Câu hỏi số 4. Async/await là gì và nó hoạt động như thế nào?
async/await là cách mới để viết mã không đồng bộ hoặc mã không chặn trong JavaScript. Nó được xây dựng dựa trên Promises. Nó làm cho việc viết mã không đồng bộ trở nên dễ đọc và gọn gàng hơn
Lời hứa và Gọi lại. Nhưng bạn phải tìm hiểu kiến thức cơ bản về Lời hứa trước khi sử dụng tính năng này vì như tôi đã nói trước đó, nó được xây dựng dựa trên Lời hứa, điều đó có nghĩa là vẫn sử dụng Lời hứa dưới mui xe.
Sử dụng lời hứa
Sử dụng Async/Await
Ghi chú. Chúng tôi đang sử dụng câu lệnh try/catch cũ để bắt bất kỳ lỗi nào xảy ra trong bất kỳ thao tác không đồng bộ nào trong câu lệnh try
Ghi chú. Từ khóa async trước khi khai báo hàm làm cho hàm trả về ngầm định một Promise
Ghi chú. Từ khóa chờ đợi chỉ có thể được sử dụng bên trong chức năng không đồng bộ. Sử dụng từ khóa chờ đợi trong bất kỳ chức năng nào khác không phải là chức năng không đồng bộ sẽ gây ra lỗi. Từ khóa await đợi biểu thức bên tay phải [có lẽ là Lời hứa] quay lại trước khi thực thi dòng mã tiếp theo
Câu hỏi số 5. Tham số mặc định là gì?
Tham số mặc định là một cách mới để xác định các biến mặc định trong JavaScript, nó có sẵn trong Phiên bản ES6 hoặc ECMAScript 2015
Chúng ta cũng có thể sử dụng Destructuring trong Default Parameters
Chúng ta cũng có thể sử dụng các tham số được xác định trước cho các tham số được xác định sau chúng
Câu hỏi số 6. Đối tượng Wrapper là gì?
Các giá trị nguyên thủy như reject
3,reject
4 và reject
5 ngoại trừ reject
6 và reject
0 có các thuộc tính và phương thức mặc dù chúng không phải là reject
8
reject
9 là một giá trị resolve
0 không có thuộc tính và phương thức nhưng trong ví dụ này, chúng tôi đang gọi một phương thức resolve
1 không đưa ra lỗi nhưng trả về SNIGDHO
Lý do cho điều này là giá trị resolve
2 tạm thời được chuyển đổi hoặc ép buộc thành một resolve
3 để biến reject
9 hoạt động giống như một biến resolve
3. Mọi resolve
2 ngoại trừ reject
6 và reject
0 đều có Đối tượng Bao bọc. Các đối tượng Wrapper là resolve
9,______20,reject
1,reject
2 và reject
3. Trong trường hợp này, lệnh gọi reject
4, đằng sau hậu trường nó trông như thế này
Đối tượng mới được tạo ngay lập tức bị loại bỏ sau khi chúng ta truy cập xong một thuộc tính hoặc gọi một phương thức
Câu hỏi số 7. Các cách để xử lý Mã không đồng bộ trong Javascript là gì?- gọi lại
- lời hứa
- không đồng bộ/chờ đợi
- Thư viện như async. js, chim xanh, q, đồng
Có 4 cách mà một hàm có thể được gọi trong JavaScript. Lời gọi xác định giá trị của reject
5 hoặc đối tượng "chủ sở hữu" của hàm đó
Gọi như một hàm — Nếu một hàm không được gọi như một phương thức, như một hàm tạo hoặc với các phương thức reject
6, reject
7 thì nó được gọi như một hàm. Đối tượng "chủ sở hữu" của chức năng này sẽ là đối tượng reject
8
Gọi như một phương thức — Nếu một thuộc tính của một đối tượng có một giá trị của một hàm, chúng ta gọi nó là một phương thức. Khi phương thức đó được gọi, giá trị reject
5 của phương thức đó sẽ là đối tượng đó
Lời gọi như một hàm tạo — Nếu một hàm được gọi với từ khóa .then
0 trước nó thì nó được gọi là .then
1. Một đối tượng trống sẽ được tạo và reject
5 sẽ trỏ đến đối tượng đó
Gọi bằng các phương thức .then
3 và .then
4 - Nếu chúng ta muốn chỉ định rõ ràng giá trị reject
5 hoặc đối tượng "chủ sở hữu" của hàm, chúng ta có thể sử dụng các phương thức này. Các phương pháp này có sẵn cho tất cả các chức năng
Câu hỏi số 9. Từ khóa
.then
6 làm gì?Từ khóa .then
0 được sử dụng với hàm tạo để tạo đối tượng
trong JavaScript.
Giả sử chúng ta có một mã ví dụ dưới đây
Từ khóa .then
0 thực hiện 4 điều
- Tạo một đối tượng rỗng
- Gán đối tượng trống đó cho giá trị
reject
5 - Hàm sẽ kế thừa từ functionName. nguyên mẫu
- Trả về
reject
5 nếu không sử dụng câu lệnh.catch
1 rõ ràng
Trong hình trên, trước tiên, nó sẽ tạo một đối tượng trống resolve
2, sau đó
nó sẽ tạo giá trị reject
5 cho đối tượng trống đó là .catch
4 và thêm các thuộc tính cho đối tượng reject
5 đó. Bởi vì chúng tôi không có câu lệnh rõ ràng .catch
1 nên nó sẽ tự động trả về reject
5 cho chúng tôi.
Khi một sự kiện xảy ra trên một phần tử DOM, sự kiện đó không hoàn toàn xảy ra trên một phần tử đó. Trong Giai đoạn nắm bắt, sự kiện bắt đầu từ reject
8 cho đến phần tử đã kích hoạt sự kiện