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 các bạn!
Bài viết này ghi lại vấn đề và cách giải quyết vấn đề của tôi. Cách thức tạo ra bài viết có thể hoàn toàn cá nhân tôi viết hoặc có sự hỗ trợ của AI. Không quan trọng cách nào, miễn là giải quyết được vấn đề. Tôi tin rằng nó giúp được tôi thì cũng giúp được cho các bạn.
Tôi là Minh, sống tại Hà Nội. Tôi là kỹ sư phần mềm với hơn 20 năm kinh nghiệm. Hiện nay, công việc chính của tôi là phát triển các app trên iOS và Android. Các ngôn ngữ và framework 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
Nếu các bạn thấy nội dung có ích hoặc đóng góp ý kiến xin để lại bình luận.
Xin trân trọng và cảm ơn,
Minh