Cách xử lý tác vụ bất đồng bộ (asynchronous tasks) trong Node.js

Trong Node.js, việc xử lý tác vụ bất đồng bộ (asynchronous tasks) là một khía cạnh quan trọng để đảm bảo ứng dụng chạy mượt mà và không bị chặn lại bởi các hoạt động đồng bộ. Trong bài viết này, chúng ta sẽ tìm hiểu cách xử lý tác vụ bất đồng bộ trong Node.js.

Sử dụng Callbacks

Callbacks là một cách phổ biến để xử lý tác vụ bất đồng bộ trong Node.js. Callbacks cho phép bạn chuyển một hàm vào một hàm khác như một tham số, và hàm được truyền vào sẽ được gọi lại sau khi tác vụ bất đồng bộ hoàn thành. Đây là một ví dụ đơn giản sử dụng callback trong Node.js:

function fetchData(callback) {
setTimeout(() => {
const data = 'Dữ liệu từ tác vụ bất đồng bộ';
callback(data);
}, 2000);
}
function processData(data) {
console.log(‘Dữ liệu đã được xử lý:’, data);
}

fetchData(processData);

 

Trong ví dụ trên, fetchData là một tác vụ bất đồng bộ, và nó sẽ gọi lại hàm processData sau khi hoàn thành. Hàm processData sẽ nhận dữ liệu từ tác vụ bất đồng bộ và xử lý nó. Kết quả sẽ được in ra console sau 2 giây.

Node.js Wallpapers - Wallpaper Cave

Sử dụng Promises

Promises là một cách tiện lợi và mạnh mẽ hơn để xử lý tác vụ bất đồng bộ trong Node.js. Promises cho phép bạn xử lý các tác vụ bất đồng bộ theo cách tuần tự và sử dụng các phương thức như thencatch để xử lý kết quả hoặc lỗi. Đây là một ví dụ sử dụng Promises trong Node.js:

function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = 'Dữ liệu từ tác vụ bất đồng bộ';
resolve(data);
}, 2000);
});
}
fetchData()
.then(data => {
console.log(‘Dữ liệu đã được xử lý:’, data);
})
.catch(error => {
console.error(‘Đã xảy ra lỗi:’, error);
});

 

Trong ví dụ trên, fetchData trả về một Promise. Nếu tác vụ bất đồng bộ hoàn thành thành công, resolve được gọi và dữ liệu được truyền vào hàm then. Nếu xảy ra lỗi, reject được gọi và lỗi được truyền vào hàm catch. Kết quả được in ra console sau 2 giây.

Node.js Wallpapers - Wallpaper Cave

Sử dụng Async/Await

Async/Await là một cú pháp mới được giới thiệu trong phiên bản ECMAScript 2017 và giúp xử lý tác vụ bất đồng bộ một cách đồng bộ hơn. Với Async/Await, bạn có thể viết mã bất đồng bộ dễ đọc và dễ hiểu hơn. Đây là một ví dụ sử dụng Async/Await trong Node.js:

function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = 'Dữ liệu từ tác vụ bất đồng bộ';
resolve(data);
}, 2000);
});
}
async function processData() {
try {
const data = await fetchData();
console.log(‘Dữ liệu đã được xử lý:’, data);
} catch (error) {
console.error(‘Đã xảy ra lỗi:’, error);
}
}

processData();

 

Trong ví dụ trên, hàm processData được đánh dấu bằng từ khóa async, cho phép sử dụng từ khóa await trong nó. Khi gọi hàm fetchData bên trong processData sử dụng await, quá trình xử lý sẽ tạm dừng cho đến khi Promise được giải quyết (hoặc bị từ chối). Sau đó, kết quả sẽ được gán vào biến data và in ra console sau 2 giây.

Node Js Wallpapers - Top Free Node Js Backgrounds - WallpaperAccess

Trên đây là một số cách xử lý tác vụ bất đồng bộ trong Node.js bằng callbacks, Promises và Async/Await. Việc sử dụng các cú pháp này giúp tăng khả năng đáp ứng và hiệu suất của ứng dụng bằng cách xử lý các tác vụ mà không chặn luồng chính. Tùy thuộc vào tình huống và sở thích của bạn, bạn có thể chọn cách phù hợp để xử lý tác vụ bất đồng bộ trong Node.js.