0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Tìm Hiểu Về Promise Trong JavaScript: Hướng Dẫn Chi Tiết Cho Người Mới Bắt Đầu

Đăng vào 1 tháng trước

• 3 phút đọc

Chủ đề:

Javascript

Giới Thiệu

Bạn có muốn nâng cao kỹ năng lập trình JavaScript của mình và tìm hiểu về cách sử dụng Promise để xử lý bất đồng bộ một cách hiệu quả hơn? Bài viết này sẽ cung cấp cho bạn cái nhìn sâu sắc về Promise, từ các khái niệm cơ bản đến các ví dụ thực tiễn.

Promise Là Gì?

Trong JavaScript, Promise được hiểu như một lời hứa trong đời thực. Promise có ba trạng thái:

  • Pending (đang chờ xử lý): Trạng thái ban đầu, trước khi Promise được thực hiện.
  • Fulfilled (đã hoàn thành): Trạng thái khi Promise đã được thực hiện thành công.
  • Rejected (đã bị từ chối): Trạng thái khi Promise thất bại và không thể thực hiện.

Tại Sao Nên Sử Dụng Promise?

Trước khi có Promise, việc xử lý các tác vụ bất đồng bộ thường dựa vào callback, dẫn đến mã nguồn trở nên khó đọc và dễ gây cảm giác rối rắm. Hãy xem ví dụ dưới đây:

javascript Copy
getData(function (data) {
  processData(data, function (result) {
    saveData(result, function (response) {
      console.log("Tất cả đã hoàn thành!");
    });
  });
});

Với sự ra đời của Promise, mã nguồn của bạn sẽ trở nên gọn gàng hơn:

javascript Copy
getData()
  .then(processData)
  .then(saveData)
  .then(() => console.log("Tất cả đã hoàn thành!"))
  .catch((error) => console.error("Có điều gì đó không ổn:", error));

Cách Tạo Một Promise Đơn Giản

Dưới đây là cách đơn giản để bạn tạo một Promise:

javascript Copy
const myPromise = new Promise((resolve, reject) => {
  const success = true; // Thay đổi thành false để kiểm tra trạng thái từ chối
  if (success) {
    resolve("Yay! Nó đã hoạt động! 🎉");
  } else {
    reject("Ôi không! Có gì đó không ổn. 😢");
  }
});

Sử dụng Promise:

javascript Copy
myPromise
  .then((message) => console.log(message))
  .catch((error) => console.error(error));

Ví Dụ Thực Tế Về Sử Dụng Promise

Một trong những ví dụ phổ biến nhất khi sử dụng Promise là với hàm fetch để lấy dữ liệu từ API:

javascript Copy
fetch("https://jsonplaceholder.typicode.com/users/1")
  .then((response) => response.json()) // Chuyển đổi phản hồi sang JSON
  .then((data) => console.log("Dữ liệu người dùng:", data)) // In dữ liệu ra
  .catch((error) => console.error("Lỗi khi lấy dữ liệu:", error)); // Xử lý lỗi

Nối Chuỗi Promise

Bạn có thể kết nối nhiều Promise bằng cách sử dụng .then, cho phép thực hiện nhiều bước xử lý liên tiếp:

javascript Copy
fetch("https://jsonplaceholder.typicode.com/posts/1")
  .then((response) => response.json())
  .then((post) => {
    console.log("Tiêu đề bài viết:", post.title);
    return fetch(`https://jsonplaceholder.typicode.com/users/${post.userId}`);
  })
  .then((response) => response.json())
  .then((user) => console.log("Tác giả:", user.name))
  .catch((error) => console.error("Có điều gì đó không ổn:", error));

Xử Lý Lỗi Với Promise

Khối .catch là nơi xử lý mọi lỗi trong chuỗi Promise:

javascript Copy
fetch("https://jagroopurl.com") // Đây là một URL không hợp lệ
  .then((response) => response.json())
  .catch((error) => console.error("Ôi không, lỗi đã bị bắt ở đây:", error));

Mẹo hữu ích: Luôn thêm .catch vào cuối mỗi chuỗi Promise để tránh lỗi không được xử lý.

Tạo Nhiều Promise Song Song Với Promise.all

Bạn có thể chạy nhiều Promise cùng một lúc bằng Promise.all:

javascript Copy
const promise1 = fetch("https://jsonplaceholder.typicode.com/posts/1");
const promise2 = fetch("https://jsonplaceholder.typicode.com/posts/2");

Promise.all([promise1, promise2])
  .then((responses) => Promise.all(responses.map((r) => r.json())))
  .then((data) => console.log("Cả hai bài viết:", data))
  .catch((error) => console.error("Một hoặc nhiều Promise đã thất bại:", error));

Bộ Đếm Thời Gian Dựa Trên Promise

Bạn cũng có thể xây dựng một hàm bộ đếm thời gian sử dụng Promise:

javascript Copy
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

wait(2000).then(() => console.log("2 giây sau... ⏰"));

Hy vọng rằng thông tin trong bài viết này sẽ hữu ích cho bạn trong việc tìm hiểu và áp dụng Promise trong JavaScript! Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại ý kiến của bạn ở dưới.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào