Nhận kết quả lời hứa JavaScript

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ờ đợi

Chú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 asyncawait

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ận

Chú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

  1. 'đang chờ xử lý' -  Trường hợp tác vụ vẫn đang được thực thi
  2. 'đã hoàn thành' - Tác vụ đã được thực thi thành công và giá trị được trả về
  3. '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

  1. Hứa. sau đó()
  2. 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"

Làm cách nào tôi có thể nhận được tất cả các kết quả Promise?

Lời hứa. all() sẽ từ chối ngay lập tức khi bất kỳ lời hứa đầu vào nào từ chối. Để so sánh, lời hứa được trả lại bởi Promise. allSettled() sẽ đợi tất cả các lời hứa đầu vào hoàn thành, bất kể có từ chối hay không. Sử dụng allSettled() nếu bạn cần kết quả cuối cùng của mọi lời hứa trong lần lặp đầu vào .

Giá trị trả về của Promise * là gì?

Trả về giá trị . Lời hứa mới này luôn ở trạng thái chờ khi được trả lại, bất kể trạng thái của lời hứa hiện tại. Một trong các trình xử lý onFulfills và onRejected sẽ được thực thi để xử lý việc thực hiện hoặc từ chối lời hứa hiện tại. Returns a new Promise immediately. This new promise is always pending when returned, regardless of the current promise's status. One of the onFulfilled and onRejected handlers will be executed to handle the current promise's fulfillment or rejection.

Lời hứa trả về trong JavaScript là gì?

Về cơ bản, một lời hứa là một đối tượng được trả về mà bạn đính kèm các lệnh gọi lại , thay vì chuyển các lệnh gọi lại vào một hàm.

Loại trả về Promise là gì?

Lời hứa chấp nhận chức năng gọi lại làm tham số và ngược lại, hàm gọi lại chấp nhận hai tham số khác, giải quyết và từ chối. Nếu điều kiện là đúng, thì giải pháp được trả về; . Về cơ bản, kiểu trả về của kiểu Promise được xác định ngay sau từ khóa Promise .