- vừa được xem lúc

Làm chủ Bất đồng bộ trong JavaScript: setTimeout, Promise và async/await

0 0 14

Người đăng: Hà Minh Thuận

Theo Viblo Asia

Trong lập trình JavaScript, bất đồng bộ là một khái niệm quan trọng đồng thời cũng là một trong những điểm mạnh của ngôn ngữ này. Bất đồng bộ cho phép các hoạt động tiếp tục thực thi mà không chờ đợi hoàn thành của các hoạt động khác, giúp tăng cường hiệu suất và phản hồi người dùng. Trong bài viết này, chúng ta sẽ khám phá 3 cơ chế chính để làm chủ bất đồng bộ trong JavaScript: setTimeout, Promise, và async/await.

setTimeout

setTimeout là một cơ chế cơ bản để thực hiện các hành động bất đồng bộ trong JavaScript. Nó cho phép bạn đặt một hàm để thực thi sau một khoảng thời gian nhất định.

Đặc điểm và cách sử dụng:

setTimeout(function() { console.log("Thông báo sau 2 giây");
}, 2000);

Ưu và nhược điểm của setTimeout: Ưu điểm: Đơn giản và dễ sử dụng
Nhược điểm: Không linh hoạt khi cần xử lý nhiều công việc bất đồng bộ, không thích hợp cho các tác vụ phức tạp.

Promise

Promise là một phần của tiêu chuẩn ES6 giúp xử lý bất đồng bộ một cách linh hoạt và dễ dàng hơn.
Cách hoạt động:: Một Promise có thể ở trong một trong ba trạng thái: pending, fulfilled hoặc rejected..

Tạo và sử dụng Promise:

const promise = new Promise((resolve, reject) => { // Xử lý bất đồng bộ if (/* điều kiện */) { resolve("Thành công!"); } else { reject("Thất bại!"); }
}); promise.then((result) => { console.log(result);
}).catch((error) => { console.error(error);
});

Ưu điểm của Promise:

  • Linh hoạt và dễ dàng xử lý các tác vụ bất đồng bộ phức tạp.
  • Giảm sự lồng nhau của callback, làm code dễ đọc hơn.

Ví dụ thực tế:

const fetchData = () => { return new Promise((resolve, reject) => { // Gọi API resolve(data); });
}; fetchData() .then((data) => { console.log(data); }) .catch((error) => { console.error(error); });

Async/Await

async/await là một cú pháp mới trong JavaScript giúp viết mã bất đồng bộ một cách rõ ràng và dễ đọc hơn.

Giới thiệu và cách sử dụng:

async function fetchData() { try { const data = await fetchDataFromAPI(); console.log(data); } catch (error) { console.error(error); }
}

Ưu điểm:

  • Rõ ràng và dễ đọc hơn so với Promise.
  • Sử dụng try/catch để xử lý lỗi.

Ví dụ thực tế:

async function fetchData() { try { const data1 = await fetchDataFromAPI1(); const data2 = await fetchDataFromAPI2(); console.log(data1, data2); } catch (error) { console.error(error); }
}

So sánh

Tổng hợp và so sánh:

  • setTimeout đơn giản nhưng hạn chế.
  • Promise linh hoạt và phổ biến, giảm lồng nhau của callback ( tránh được hiện tượng callback hell ).
  • async/await dễ đọc và hiểu hơn, giúp xử lý lỗi dễ dàng hơn.

Đề xuất sử dụng:

  • Sử dụng setTimeout cho các tác vụ đơn giản.
  • Sử dụng Promise cho các tác vụ phức tạp hơn.
  • Sử dụng async/await cho mã dễ đọc và hiểu hơn.

Kết luận

Bất đồng bộ là một khía cạnh quan trọng của JavaScript, giúp tăng cường hiệu suất và phản hồi người dùng. Bằng cách làm chủ các cơ chế như setTimeout, Promise, và async/await, bạn có thể viết mã JavaScript một cách linh hoạt và hiệu quả hơn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 158

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249