Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript
Trong lập trình JavaScript, khi làm việc với các tác vụ bất đồng bộ như gọi API, đọc file hoặc thao tác với cơ sở dữ liệu, việc sử dụng vòng lặp for-await
là một cách linh hoạt và hiệu quả để xử lý kết quả của các tác vụ này. Trong bài viết này, mình sẽ tìm hiểu cách sử dụng vòng lặp for-await
để xử lý các tác vụ bất đồng bộ một cách chi tiết.
Vòng lặp for-await trong JavaScript là gì?
Trước hết, hãy hiểu về khái niệm của vòng lặp for-await
trong JavaScript.
- Vòng lặp
for-await
là một tính năng mới được giới thiệu trong phiên bản ECMAScript 2018 (ES2018). Vòng lặp này được thiết kế đặc biệt để xử lý các tác vụ bất đồng bộ một cách hiệu quả và tiện lợi. - Vòng lặp
for-await
cho phép bạn lặp qua các giá trị từ một AsyncIterable object (đối tượng có thể lặp qua bất đồng bộ) một cách đơn giản và trực tiếp. Các giá trị này thường là kết quả của các hoạt động bất đồng bộ như gọi API, đọc file, hoặc xử lý dữ liệu từ cơ sở dữ liệu. - Khi sử dụng vòng lặp for-await, mỗi lần lặp sẽ đợi cho giá trị bất đồng bộ tiếp theo được giải quyết trước khi tiếp tục. Điều này giúp đảm bảo rằng các tác vụ bất đồng bộ được thực hiện theo đúng trình tự và không gây ra sự chặn trở hoặc đợi chờ không cần thiết trong quá trình thực thi mã.
Ví dụ, bạn có thể sử dụng vòng lặp for-await để lặp qua các Promise và xử lý kết quả của chúng một cách tuần tự và linh hoạt.
Ví dụ về vòng lặp for-await
async function processAsyncIterable(asyncIterable) { for await (const value of asyncIterable) { console.log(value); } } const asyncIterable = [ new Promise(resolve => setTimeout(() => resolve(1), 1000)), new Promise(resolve => setTimeout(() => resolve(2), 2000)), new Promise(resolve => setTimeout(() => resolve(3), 3000)) ]; processAsyncIterable(asyncIterable);
Trong ví dụ này, vòng lặp for-await
được sử dụng để lặp qua các giá trị từ asyncIterable
, mỗi giá trị là kết quả của một Promise
.
Bài viết này được đăng tại [free tuts .net]
Sử dụng vòng lặp for-await trong JavaScript
Để sử dụng vòng lặp for-await
trong JavaScript, bạn cần có một đối tượng AsyncIterable, có thể là một mảng các promise, một đối tượng generator async,
hoặc một đối tượng tạo ra thông qua một phương thức có thể lặp qua bất đồng bộ. Dưới đây là cách sử dụng vòng lặp for-await với một mảng các promise:
// Định nghĩa một async function để thực hiện các tác vụ bất đồng bộ async function processAsyncIterable(asyncIterable) { try { // Sử dụng vòng lặp for-await để lặp qua các giá trị bất đồng bộ từ AsyncIterable object for await (const value of asyncIterable) { console.log(value); // Xử lý giá trị từ mỗi promise } } catch (error) { console.error('Có lỗi xảy ra:', error); } } // Tạo một mảng các promise const asyncIterable = [ new Promise(resolve => setTimeout(() => resolve(1), 1000)), new Promise(resolve => setTimeout(() => resolve(2), 2000)), new Promise(resolve => setTimeout(() => resolve(3), 3000)) ]; // Gọi async function để thực thi vòng lặp processAsyncIterable(asyncIterable);
Trong ví dụ trên:
processAsyncIterable
là mộtasync function
nhận mộtAsyncIterable object
làm đối số.- Vòng lặp for-await được sử dụng để lặp qua các giá trị từ asyncIterable. Mỗi giá trị là kết quả của một promise trong mảng asyncIterable.
- Vòng lặp này sẽ đợi mỗi promise được giải quyết trước khi tiếp tục vòng lặp.
Kết quả:
Kết bài
Với vòng lặp for-await, bạn có thể xử lý dữ liệu từ Stream hoặc Iterator một cách hiệu quả và linh hoạt trong JavaScript. Điều này giúp cho việc xử lý dữ liệu liên tục trở nên dễ dàng hơn và đảm bảo tính ổn định của ứng dụng.