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

Top 5 Sai Lầm Khi Xử Lý Async Trong Node.js

0 0 3

Người đăng: Hoài Long

Theo Viblo Asia

Node.js nổi tiếng với khả năng xử lý bất đồng bộ (async) siêu mượt, nhờ vào event loop và non-blocking I/O. Nhưng nếu bạn không hiểu rõ cơ chế này, rất dễ dính “bug vô hình” hoặc làm hiệu năng tụt dốc không phanh.

Dưới đây là 5 sai lầm phổ biến nhất khi xử lý async mà mình gặp thấy (và từng phạm phải 😅):


1. Quên await hoặc .then() khi gọi hàm async

Ví dụ sai:

const data = fetchData(); // fetchData là hàm async
console.log(data); // sẽ in ra Promise { <pending> }

Giải pháp đúng:

const data = await fetchData();

Hoặc:

fetchData().then(data => console.log(data));

Nhớ: Nếu bạn thấy output là [object Promise], tức là bạn đã quên await.

2. Dùng await trong vòng lặp forEach

myArray.forEach(async (item) => { await doSomething(item); // KHÔNG hoạt động như bạn nghĩ
});

forEach không đợi await, nên mọi thứ chạy cùng lúc.

Cách đúng:

for (const item of myArray) { await doSomething(item);
}

Hoặc nếu muốn chạy song song:

await Promise.all(myArray.map(item => doSomething(item)));

3. Không xử lý lỗi với try/catch hoặc .catch()

const result = await mayThrowError(); // nếu lỗi xảy ra, app crash

Nên bọc trong try/catch:

try { const result = await mayThrowError();
} catch (err) { console.error('Error happened:', err);
}

Hoặc với Promise:

mayThrowError().catch(err => console.error(err));

4. Chặn event loop bằng tác vụ đồng bộ nặng

app.get('/', (req, res) => { // Blocking code for (let i = 0; i < 1e10; i++) {} res.send('Done');
});

Tác vụ trên sẽ** chặn toàn bộ server**, vì JavaScript chỉ có 1 thread chạy chính.

Cách giải quyết:

  • Tách ra thành child process hoặc
  • Dùng Worker Threads nếu là Node >= 12
  • Hoặc đơn giản: tránh xử lý nặng trong main thread

5. Không chờ tất cả Promise hoàn thành

const tasks = [task1(), task2(), task3()];
tasks.forEach(async t => await t); // SAI – không đợi

Cách đúng:

await Promise.all([task1(), task2(), task3()]);

Tổng kết

Xử lý async là cốt lõi của Node.js, nhưng cũng dễ gây "ngơ ngác, bật ngửa" nếu bạn chưa quen. Nắm chắc các nguyên tắc trên sẽ giúp bạn:

  • Viết code rõ ràng, dễ debug
  • Tránh bug ngầm
  • Tối ưu hiệu năng hệ thống

Bình luận

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

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

Hiều về kiến trúc hướng sự kiện của Node.js

Bài viết được dịch từ nguồn. Hầu hết các node objects như HTTP request, HTTP response hay HTTP stream - đều implement EventEmitter module nên chúng đều có thể:.

0 0 34

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

Cách Tạo và Chạy Containers Đơn Giản

Docker: Cách Tạo và Chạy Containers Đơn Giản. Docker đã trở thành một công cụ không thể thiếu cho các nhà phát triển và các nhóm DevOps.

0 0 10

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

Triển khai môi trường phát triển Node.js 18.3 trong 2 phút - triển khai các công cụ chỉ bằng một cú nhấp chuột

ServBay là một công cụ quản lý môi trường phát triển mạnh mẽ hỗ trợ nhiều ngôn ngữ phát triển và cơ sở dữ liệu. Sau đây là các bước chi tiết về cách cài đặt và triển khai Node.

0 0 10

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

Giải Quyết Callback Hell: 3 Cấp Độ Quản Lý Bất Đồng Bộ trong JavaScript

Khi làm việc với các tác vụ bất đồng bộ trong JavaScript, lập trình viên sẽ thường xuyên phải đối mặt với vấn đề xử lý tuần tự các hành động không đồng bộ. Điều này có thể dẫn đến Callback Hell, làm m

0 0 14

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

Cách xử lý nhiều yêu cầu tranh chấp một tài nguyên ở cùng một thời điểm khi scaling Kubernetes Pod

Tôi có một business service (tạm gọi là Service W được viết bằng Nodejs) được subscribe vào keyspace của Redis theo cơ chế pub-sub (đang được serve trên Kubernetes), Service W này hoạt động như một wo

0 0 5

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

Cách nhanh nhất để xây dựng dự án React vào năm 2025 (các công cụ mới nhất)

Vào năm 2025, React tiếp tục dẫn đầu xu hướng phát triển front-end. Với những tiến bộ trong công cụ và công nghệ, việc thiết lập một dự án React đã trở nên hiệu quả và thuận tiện hơn.

0 0 5