Nội dung bài viết
TogglePromise trong JavaScript là gì?
Trong lập trình JavaScript, Promise là một đối tượng được sử dụng để thực hiện các tác vụ bất đồng bộ và trả về kết quả sau khi các tác vụ đó hoàn thành. Promise cung cấp một cơ chế để xử lý các tác vụ bất đồng bộ một cách đồng bộ và dễ dàng hơn, giúp cho code trở nên dễ đọc và dễ bảo trì hơn.
Promise có thể được tạo bằng cách sử dụng từ khóa new Promise()
. Các tác vụ bất đồng bộ được thực hiện trong phần executor
của Promise. Trong executor, bạn cần định nghĩa các tác vụ và xử lý các kết quả tùy thuộc vào kết quả của các tác vụ đó. Nếu tác vụ được thực hiện thành công, bạn có thể sử dụng hàm resolve()
để trả về kết quả. Nếu tác vụ thất bại, bạn có thể sử dụng hàm reject()
để trả về lỗi.
Sau khi Promise được tạo, bạn có thể sử dụng phương thức .then()
để xử lý kết quả thành công và phương thức .catch()
để xử lý lỗi. Nếu bạn muốn thực hiện các tác vụ bất đồng bộ theo chuỗi, bạn có thể sử dụng phương thức .then()
liên tiếp để gọi các tác vụ khác nhau và truyền kết quả của tác vụ trước cho tác vụ tiếp theo.
Với Promise, bạn có thể dễ dàng xử lý các tác vụ bất đồng bộ một cách chính xác và hiệu quả, giúp cho ứng dụng của bạn chạy nhanh hơn và tránh được các lỗi không mong muốn.
Những trạng thái của Promise trong JavaScript?
Promise có thể ở một trong các trạng thái sau:
Pending: Đây là trạng thái ban đầu của Promise, khi một Promise được tạo nhưng chưa được giải quyết hoặc từ chối.
Fulfilled: Promise được giải quyết thành công và trả về một giá trị kết quả. Khi Promise ở trạng thái này, phương thức
.then()
có thể được sử dụng để xử lý kết quả thành công.Rejected: Promise bị từ chối và trả về một lỗi. Khi Promise ở trạng thái này, phương thức
.catch()
có thể được sử dụng để xử lý lỗi.
Khi một Promise đã được giải quyết hoặc từ chối, nó sẽ ở ở trạng thái ổn định và không thể thay đổi trạng thái của nó. Nếu bạn muốn tạo một Promise mới, bạn phải tạo một Promise mới từ đầu.
Promise là một công cụ mạnh mẽ để xử lý các tác vụ bất đồng bộ trong JavaScript và giúp cho việc lập trình trở nên dễ dàng và hiệu quả hơn. Bằng cách hiểu rõ các trạng thái của Promise, bạn có thể dễ dàng xử lý các tác vụ bất đồng bộ một cách chính xác và hiệu quả.
Cách viết một Promise trong JavaScript
Dưới đây là cách để giúp chúng ta viết một Promise trong JavaScript bạn có thể sử dụng cú pháp dưới đây
const myPromise = new Promise((resolve, reject) => {
// code thực hiện tác vụ bất đồng bộ
if (/* tác vụ thành công */) {
resolve(/* giá trị trả về */);
} else {
reject(/* lỗi trả về */);
}
});
Trong đó:
resolve
: là một hàm được gọi khi tác vụ bất đồng bộ thành công và trả về một giá trị kết quả.reject
: là một hàm được gọi khi tác vụ bất đồng bộ thất bại và trả về một lỗi.
Một ví dụ giúp ta hiểu rõ hơn về Promise trong JavaScript
Ví dụ, đoạn code sau sử dụng Promise để lấy dữ liệu từ một API và trả về kết quả dưới dạng JSON
const getData = () => {
return new Promise((resolve, reject) => {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => resolve(data))
.catch(error => reject(error));
});
};
getData()
.then(data => console.log(data))
.catch(error => console.error(error));
Trong đoạn code trên, getData()
trả về một Promise, khi Promise này được giải quyết, phương thức .then()
được gọi để xử lý kết quả thành công và phương thức .catch()
được gọi để xử lý lỗi.
Việc sử dụng Promise giúp cho việc xử lý các tác vụ bất đồng bộ trở nên dễ dàng và hiệu quả hơn, đồng thời giúp cho việc xử lý lỗi và xử lý kết quả thành công trở nên rõ ràng và dễ dàng hơn.
Method then và catch trong và ví dụ trong JavaScript
Để xử lý kết quả trả về của một Promise, chúng ta sử dụng phương thức then()
hoặc catch()
.
Phương thức then()
được sử dụng để xử lý kết quả trả về thành công của một Promise. Nó nhận vào một hàm xử lý với tham số là kết quả trả về của Promise. Ví dụ:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Hello, world!');
}, 2000);
});
promise.then((result) => {
console.log(result); // Kết quả: "Hello, world!"
});
Phương thức catch()
được sử dụng để xử lý kết quả trả về khi một Promise thất bại. Nó nhận vào một hàm xử lý với tham số là lý do thất bại của Promise. Ví dụ:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('Something went wrong!'));
}, 2000);
});
promise.catch((error) => {
console.error(error); // Kết quả: "Error: Something went wrong!"
});
Ngoài ra, chúng ta có thể kết hợp phương thức then()
và catch()
để xử lý kết quả trả về của một Promise dễ dàng hơn. Ví dụ:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const randomNumber = Math.random();
if (randomNumber > 0.5) {
resolve(randomNumber);
} else {
reject(new Error('Number is too small!'));
}
}, 2000);
});
promise
.then((result) => {
console.log(result); // Kết quả: một số ngẫu nhiên lớn hơn 0.5
})
.catch((error) => {
console.error(error); // Kết quả: "Error: Number is too small!"
});
Kết luận rằng: phương thức then()
được sử dụng để xử lý kết quả trả về thành công của một Promise, trong khi phương thức catch()
được sử dụng để xử lý kết quả trả về khi Promise thất bại. Việc sử dụng cả hai phương thức này sẽ giúp chúng ta xử lý các kết quả trả về của Promise một cách chính xác và linh hoạt hơn.