Một cách để lấy giá trị được phân giải giá trị của một JavaScript hứa rằng nó sẽ gọi phương thức then với một hàm gọi lại có một tham số
Tham số có giá trị được giải quyết
Chẳng hạn, chúng ta có thể viết
Promise.resolve(1).then((result) => {
console.log(result)
});
Chúng tôi gọi Promise.resolve để trả lại một lời hứa đã giải quyết thành 1
Sau đó, chúng tôi gọi then trên đó với một cuộc gọi lại có tham số result
result nên có giá trị được giải quyết của lời hứa
Và do đó, giá trị của result là 1
Sử dụng cú pháp không đồng bộ và chờ đợiChúng tôi cũng có thể nhận được giá trị được giải quyết của một lời hứa với cú pháp async và await
Chẳng hạn, chúng ta có thể viết
(async () => {const result = await Promise.resolve(1)
console.log(result)
})()
Chúng tôi gán giá trị đã giải quyết của lời hứa với cú pháp await cho biến result
Do đó, result cũng phải là 1 trong ví dụ này
Chỉ có thể sử dụng await bên trong hàm async
Phần kết luậnChúng ta có thể lấy giá trị đã phân giải của JavaScript bằng từ khóa await trong hàm async hoặc gọi then với hàm gọi lại có giá trị đã phân giải làm tham số đầu tiên
Trong JavaScript, Lời hứa được sử dụng để xử lý các hoạt động không đồng bộ. Nó chỉ là một trình giữ chỗ cho một nhiệm vụ đang chờ xử lý chưa được hoàn thành
Lời hứa có ba trạng thái
- 'đang chờ xử lý' - Trường hợp tác vụ vẫn đang được thực thi
- 'đã hoàn thành' - Tác vụ đã được thực thi thành công và giá trị được trả về
- 'bị từ chối' - Tác vụ không thực thi được và trả về thông báo lỗi nếu có
Trong JavaScript hiện đại, bạn có thể triển khai và truy cập giá trị của lời hứa bằng cách sử dụng
- Hứa. sau đó()
- Không đồng bộ - Đang chờ
Hứa. sau đó()
Trong phương thức này, để truy cập giá trị của một lời hứa, chúng ta chỉ cần gọi một phương thức "then()" theo sau lời hứa
const promise = Promise.resolve("This is a fulfilled promise"); promise .then((value) => { console.log(value); //This is a fulfilled promise 👈 }) .catch((err) => { console.log(err); });Trong đoạn mã trên, chúng tôi đã tạo một lời hứa bằng cách sử dụng "Lời hứa. giải quyết ()" và lưu nó vào một biến. Sau đó, chúng ta có thể gọi phương thức "then()" trên biến này, phương thức này sẽ chứa giá trị lời hứa được trả về làm tham số cho hàm. Chúng ta có thể sử dụng giá trị này để tính toán thêm
Nếu bạn để ý, chúng tôi đã sử dụng phương thức "catch()" theo sau là phương thức "then()" trong mã ví dụ. Điều này là để xử lý một lời hứa từ chối. Đoạn mã sau sẽ dẫn đến lời hứa bị từ chối. Chúng tôi có thể tạo một lời hứa từ chối bằng cách sử dụng "Lời hứa. phương thức từ chối ()"
const promiseRejected = Promise.reject("This is a rejected promise"); promise .then((value) => { console.log(value); }) .catch((err) => { console.log(err); //This is a rejected promise 👈 });Chờ đợi không đồng bộ
Đây là phương thức thứ hai bạn có thể sử dụng để xử lý giá trị trả về của JavaScript Promise. Phương thức chờ đợi không đồng bộ thường được sử dụng bên trong hàm javascript. Các ví dụ sau sẽ chỉ ra cách xử lý việc thực hiện hoặc từ chối một lời hứa
const promise = Promise.resolve("This is a promise"); async function PromiseExample() { try { const value = await promise; console.log(value); //This is a promise 👈 } catch (error) { console.log(error); } } PromiseExample();Chúng tôi đã tạo một lời hứa mẫu bằng cách sử dụng "Lời hứa. giải quyết ()" và lưu nó vào một biến. Sau đó, chúng tôi đã gọi biến cùng với toán tử "chờ đợi" bên trong hàm không đồng bộ
Quan trọng - Hàm có toán tử "await" được gọi bên trong phải luôn được khai báo bằng từ khóa "async" để làm cho hàm có khả năng thực thi không đồng bộ
Bây giờ, chúng ta sẽ tạo một lời hứa từ chối bằng cách sử dụng "Promise. reject()" để xem cách xử lý từ chối
const promiseRejected = Promise.reject("This is a rejected promise"); async function PromiseExample() { try { const value = await promise; console.log(value); } catch (error) { console.log(error); //This is a rejected promise 👈 } } PromiseExample();Lưu ý cách xử lý từ chối bằng cách sử dụng khối "thử bắt". Đây là kỹ thuật truy xuất lý do từ chối lời hứa
Sử dụng khối try-catch là cần thiết khi sử dụng phương pháp "Async-await" để xử lý từ chối. Nếu chúng tôi gặp lỗi chưa được xử lý từ một lời hứa do không có phương thức "bắt", chúng tôi sẽ không bao giờ biết nguyên nhân gây ra lỗi
Sử dụng Async-await bên ngoài một chức năng
Có thể có những trường hợp bạn cần sử dụng "async-await" bên ngoài chức năng javascript. Điều này là có thể với một số tinh chỉnh. Tuy nhiên, nó không được hỗ trợ trong phiên bản trước của NodeJS và các trình duyệt. Chỉ các phiên bản NodeJS sau "16. 12. 0" và các trình duyệt hiện đại hỗ trợ điều này
Một "chờ đợi" bên ngoài một chức năng được gọi là "chờ đợi" cấp cao nhất. Để bật tính năng chờ cấp cao nhất, chúng tôi cần đưa tệp JavaScript dưới dạng "mô-đun" vào bên trong tệp "HTML"