Dưới đây là một ví dụ về đoạn mã JavaScript sử dụng Promise để đảm bảo rằng ba tiến trình được thực thi cùng lúc và chỉ khi cả ba đã hoàn thành thì mới thực hiện một tác vụ sau đó:
// Hàm giả lập một công việc bất kỳ mất một khoảng thời gian để hoàn thành
function doSomeWork(workName, time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`${workName} đã hoàn thành sau ${time} ms`);
resolve();
}, time);
});
}
// Sử dụng Promise.all để đảm bảo cả 3 tiến trình cùng hoàn thành
Promise.all([
doSomeWork("Tiến trình 1", 2000),
doSomeWork("Tiến trình 2", 1500),
doSomeWork("Tiến trình 3", 1000)
])
.then(() => {
console.log("Tất cả các tiến trình đã hoàn thành.");
// Thêm tác vụ sau khi cả 3 tiến trình đã hoàn thành ở đây
})
.catch((error) => {
console.error("Có lỗi xảy ra: ", error);
});
Trong ví dụ này, chúng ta sử dụng Promise.all
để đợi cho đến khi tất cả các Promise trong mảng đã được giải quyết thành công (hoàn thành). Sau khi tất cả ba tiến trình đã hoàn thành, chúng ta có thể thực hiện các tác vụ khác bằng cách sử dụng .then()
.
Bạn có thể giải thích kỹ hơn về Promise
Tất nhiên! Promises là một khái niệm quan trọng trong JavaScript được sử dụng để quản lý xử lý bất đồng bộ (asynchronous) và làm cho mã trở nên dễ đọc và dễ quản lý hơn khi làm việc với các tác vụ không đồng bộ như tải tệp từ máy chủ, gửi yêu cầu HTTP, hoặc thực hiện các tác vụ chạy trong nền.
Một Promise trong JavaScript là một đối tượng biểu thị một giá trị chưa có sẵn vào thời điểm tạo ra, nhưng sẽ có sẵn trong tương lai. Promise có hai trạng thái chính:
- Pending (Chờ): Trạng thái ban đầu khi Promise được tạo ra. Promise đang chờ để hoàn thành (thành công hoặc thất bại).
- Fulfilled (Thành công): Trạng thái khi Promise hoàn thành thành công và trả về kết quả mong đợi.
- Rejected (Thất bại): Trạng thái khi Promise thất bại và trả về một lỗi.
Một Promise có thể chuyển từ trạng thái “chờ” sang trạng thái “thành công” hoặc “thất bại” bằng cách sử dụng các hàm resolve
và reject
. Cụ thể, resolve
được gọi khi tác vụ hoàn thành thành công, và reject
được gọi khi có lỗi.
Dưới đây là một ví dụ đơn giản về cách tạo và sử dụng một Promise:
// Tạo một Promise đơn giản
const myPromise = new Promise((resolve, reject) => {
// Thực hiện một tác vụ bất đồng bộ, ví dụ: setTimeout
setTimeout(() => {
const randomNumber = Math.random();
if (randomNumber > 0.5) {
// Thành công
resolve(randomNumber);
} else {
// Thất bại
reject("Lỗi: Số ngẫu nhiên nhỏ hơn 0.5");
}
}, 1000);
});
// Sử dụng Promise
myPromise
.then((result) => {
console.log("Thành công:", result);
})
.catch((error) => {
console.error("Thất bại:", error);
});
Trong ví dụ này, myPromise
sẽ hoàn thành sau khoảng 1 giây và có thể thành công hoặc thất bại dựa trên giá trị của randomNumber
. .then()
được sử dụng để xử lý kết quả thành công, và .catch()
để xử lý lỗi.
Xin chào,
Bài viết này sử dụng AI ChatGPT để viết sau đó được lựa chọn, biên tập lại nội dung, chỉ một phần nhỏ các bài là tôi tự viết. Nội dung thể hiện ý chí cá nhân về các vấn đề, giải pháp. Tôi lưu tại website này để học, tra cứu và chia sẻ.
Tôi là Minh, sống tại Hà Nội, kỹ sư phần mềm với hơn 20 năm kinh nghiệm. Các ngôn ngữ yêu thích của tôi là Swift, Objective-C, Java, Kotlin, .NET, HTML, JavaScript, CSS, Bootstrap, jQuery, AngularJS, Angular…
Các bạn có thể tải app của tôi trên App Store hoặc Google Play:
QuestionBank-Ôn thi vào 10: phiên bản iOS, phiên bản Android
TypingTest by QuestionBank: phiên bản iOS, phiên bản Android
Xin cảm ơn,
Minh