CĂN BẢN
DOM & BOM
XỨ LÝ FORM
JAVASCRIPT TIPS
TUTORIALS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Trong JavaScript, Promise là một cơ chế mạnh mẽ cho việc xử lý các tác vụ bất đồng bộ. Promise.all và Promise.race là hai phương thức cực kỳ hữu ích để quản lý và điều khiển các Promise. Trong bài viết này, mình sẽ đi vào từng bước chi tiết để hiểu cách sử dụng chúng một cách dễ hiểu nhất.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Promise trong JavaScript là gì?

Promise là một đối tượng được sử dụng để xử lý các tác vụ bất đồng bộ một cách linh hoạt và hiệu quả. Promise là một cơ chế mạnh mẽ cho việc xử lý các hoạt động như gọi API từ xa, truy vấn cơ sở dữ liệu, hoặc thực hiện các thao tác I/O mà có thể mất thời gian để hoàn thành.

Các đặc điểm chính của Promise trong JavaScript bao gồm:

Đại diện cho kết quả của một tác vụ bất đồng bộ: Promise đại diện cho một giá trị hoặc một tác vụ có thể hoàn thành ở một thời điểm sau. Điều này giúp quản lý và xử lý kết quả của các hoạt động bất đồng bộ một cách dễ dàng.

Bài viết này được đăng tại [free tuts .net]

Có ba trạng thái: Promise có thể ở ba trạng thái khác nhau:

  • pending: Trạng thái ban đầu khi một Promise được tạo.
  • fulfilled: Trạng thái khi một Promise hoàn thành thành công.
  • rejected: Trạng thái khi một Promise bị từ chối (thất bại).

Cung cấp phương thức then và catch: Promise cung cấp các phương thức then và catch để xử lý kết quả thành công hoặc lỗi của tác vụ bất đồng bộ tương ứng. Phương thức then được sử dụng để xử lý kết quả thành công của Promise, trong khi phương thức catch được sử dụng để xử lý lỗi của Promise.

Promise trong JavaScript giúp làm cho việc xử lý các tác vụ bất đồng bộ trở nên dễ dàng hơn và cung cấp một cơ chế linh hoạt để quản lý luồng thực thi của ứng dụng.

Sử dụng Promise.all trong JavaScript

Promise.all là một phương thức nhận vào một mảng các Promise và trả về một Promise mới. Nó sẽ được giải quyết khi tất cả các Promise trong mảng đều đã được giải quyết.

const promises = [promise1, promise2, promise3];

Promise.all(promises)
    .then(results => {
        console.log('Tất cả các Promise đã được giải quyết:', results);
    })
    .catch(error => {
        console.error('Có lỗi xảy ra:', error);
    });

Trong ví dụ này:

  • Một mảng các Promise (promises) được truyền vào Promise.all.
  • Phương thức then sẽ được gọi khi tất cả các Promise trong mảng đã được giải quyết thành công.
  • Nếu bất kỳ Promise nào trong mảng bị từ chối, phương thức catch sẽ được gọi.

Sử dụng Promise.race trong JavaScript

Promise.race nhận vào một mảng các Promise và trả về một Promise mới. Nó sẽ được giải quyết hoặc từ chối ngay sau khi một Promise trong mảng được giải quyết hoặc từ chối.

const promises = [promise1, promise2, promise3];

Promise.race(promises)
    .then(result => {
        console.log('Promise đầu tiên được giải quyết:', result);
    })
    .catch(error => {
        console.error('Có lỗi xảy ra:', error);
    });

Trong ví dụ này:

  • Phương thức then sẽ được gọi khi bất kỳ Promise nào trong mảng đã được giải quyết hoặc từ chối đầu tiên.
  • Nếu Promise đầu tiên giải quyết thành công, then sẽ được gọi với kết quả của Promise đó.
  • Nếu Promise đầu tiên bị từ chối, catch sẽ được gọi với lỗi của Promise đó.

Nếu bạn muốn thử chạy mã JavaScript này trên máy tính của mình, bạn cần phải tạo các Promise promise1, promise2, và promise3 trước khi sử dụng chúng trong mã của bạn. Đây chỉ là một ví dụ minh họa về cách sử dụng Promise.all.

Dưới đây là một ví dụ đơn giản về cách tạo và sử dụng các Promise:

// Tạo các Promise
const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Promise 1 resolved');
    }, 1000);
});

const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Promise 2 resolved');
    }, 2000);
});

const promise3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('Promise 3 resolved');
    }, 3000);
});

// Sử dụng Promise.all để đợi tất cả các Promise hoàn thành
const promises = [promise1, promise2, promise3];

Promise.all(promises)
    .then(results => {
        console.log('Tất cả các Promise đã được giải quyết:', results);
    })
    .catch(error => {
        console.error('Có lỗi xảy ra:', error);
    });

Trong ví dụ trên, mỗi Promise được thiết lập để trả về một giá trị sau một khoảng thời gian nhất định. Sau đó, mình sử dụng Promise.all để đợi cho tất cả các Promise hoàn thành và in ra kết quả khi chúng đã được giải quyết.

Nếu bạn chạy mã này trên môi trường Node.js hoặc trong một trình duyệt web, bạn sẽ thấy kết quả là tất cả các Promise đã được giải quyết với các giá trị tương ứng của chúng.

z5215922668936 487a9f28e941d7fcfd6c72902f1c8058 jpg

Kết bài

Sử dụng Promise.all và Promise.race là hai cách mạnh mẽ để quản lý các tác vụ bất đồng bộ trong JavaScript. Promise.all cho phép thực hiện nhiều tác vụ cùng một lúc và đợi tất cả chúng hoàn thành, trong khi Promise.race cho phép xử lý tác vụ nhanh nhất hoặc tiếp tục khi một tác vụ đã hoàn thành. Hi vọng bạn hiểu rõ cách sử dụng chúng từ bài viết này!

Cùng chuyên mục:

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

4 cách tránh memory leaks trong JavaScript

4 cách tránh memory leaks trong JavaScript

Capturing và bubbling Event trong Javascript

Capturing và bubbling Event trong Javascript

Phân biệt prototype và __proto__ trong JavaScript

Phân biệt prototype và __proto__ trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Cách khắc phục lỗi

Cách khắc phục lỗi "hoisting" trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Cách sử dụng Async functions trong JavaScript

Cách sử dụng Async functions trong JavaScript

Hàm String isspace() trong Python

Hàm String isspace() trong Python

Cách tạo số ngẫu nhiên trong Javascript

Cách tạo số ngẫu nhiên trong Javascript

Hướng dẫn cách tạo một số ngẫu nhiên ...

Cách gộp hai object javascript lại với nhau

Cách gộp hai object javascript lại với nhau

Cách lấy chiều dài của object trong Javascript

Cách lấy chiều dài của object trong Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Cách dùng nextSibling trong javascript

Cách dùng nextSibling trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng innerHTML trong Javascript

Cách dùng innerHTML trong Javascript

Cách dùng insertBefore trong javascript

Cách dùng insertBefore trong javascript

Top