Promise

1. Promise.all()

  • Mô tả: Chờ tất cả các Promise trong iterable (một mảng hoặc đối tượng lặp) hoàn thành. Nếu một Promise bị từ chối, Promise.all sẽ ngay lập tức bị từ chối với lý do từ Promise bị từ chối đó.
  • Kết quả: Một Promise hoàn thành khi tất cả các Promise đã hoàn thành thành công.
  • Sử dụng: Thích hợp khi cần thực hiện nhiều tác vụ song song và chỉ tiếp tục khi tất cả đều thành công.
  • Ví dụ:
 
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);

Promise.all([p1, p2, p3]).then(values ={
console.log(values); // [1, 2, 3]
});

2. Promise.allSettled()

  • Mô tả: Chờ tất cả các Promise trong iterable hoàn thành, bất kể thành công hay thất bại.
  • Kết quả: Trả về một mảng các đối tượng có trạng thái (status: "fulfilled" hoặc "rejected") và giá trị tương ứng.
  • Sử dụng: Thích hợp khi cần kết quả của tất cả Promise, ngay cả khi một số bị lỗi.
  • Ví dụ:
const p1 = Promise.resolve(1);
const p2 = Promise.reject('Error');
const p3 = Promise.resolve(3);

Promise.allSettled([p1, p2, p3]).then(results => {
    console.log(results);
    // [
    //   { status: 'fulfilled', value: 1 },
    //   { status: 'rejected', reason: 'Error' },
    //   { status: 'fulfilled', value: 3 }
    // ]
});

3. Promise.any()

  • Mô tả: Chờ Promise đầu tiên hoàn thành thành công (fulfilled). Nếu tất cả Promise đều bị từ chối, nó sẽ trả về một lỗi AggregateError.
  • Kết quả: Promise thành công đầu tiên.
  • Sử dụng: Khi bạn muốn tiếp tục ngay khi có một tác vụ thành công.
  • Ví dụ:
const p1 = Promise.reject('Error 1');
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);

Promise.any([p1, p2, p3]).then(result => {
    console.log(result); // 2 (Promise thành công đầu tiên)
});

4. Promise.race()

  • Mô tả: Chờ Promise nào trong iterable hoàn thành đầu tiên (dù là thành công hay thất bại).
  • Kết quả: Trả về Promise đầu tiên hoàn thành.
  • Sử dụng: Khi bạn cần hành động dựa trên Promise nào hoàn thành nhanh nhất, chẳng hạn như trong các trường hợp timeout.
  • Ví dụ:
const p1 = new Promise((resolve) => setTimeout(resolve, 500, 'Fast'));
const p2 = new Promise((resolve) => setTimeout(resolve, 1000, 'Slow'));

Promise.race([p1, p2]).then(result => {
    console.log(result); // 'Fast' (Promise hoàn thành đầu tiên)
});

5. Promise.reject()

  • Mô tả: Trả về một Promise bị từ chối ngay lập tức với lý do được cung cấp.
  • Kết quả: Một Promise bị từ chối.
  • Sử dụng: Dùng khi cần khởi tạo một Promise lỗi một cách nhanh chóng.
  • Ví dụ:
let promise = Promise.reject('Error occurred');
promise.catch(error => {
    console.error(error); // 'Error occurred'
});

6. Promise.resolve()

  • Mô tả: Trả về một Promise đã được hoàn thành ngay lập tức với giá trị được cung cấp.
  • Kết quả: Một Promise thành công.
  • Sử dụng: Dùng để khởi tạo một Promise đã hoàn thành.
  • Ví dụ:
let promise = Promise.resolve(42);
promise.then(value => {
    console.log(value); // 42
});

7. Promise.try() (Experimental)

  • Mô tả: Tương tự như Promise.resolve(), nhưng cho phép một hàm đồng bộ hoặc bất đồng bộ được thực hiện bên trong và tự động bắt lỗi. Đây là tính năng thử nghiệm và không phải là chuẩn.
  • Ví dụ:
// Hiện tại Promise.try chưa chuẩn, nhưng có thể mô phỏng bằng:
const promiseTry = (fn) => new Promise((resolve, reject) => {
    try {
        resolve(fn());
    } catch (error) {
        reject(error);
    }
});

promiseTry(() => {
    return 42;
}).then(result => {
    console.log(result); // 42
});

8. Promise.withResolvers() (Experimental)

  • Mô tả: Tạo một Promise mới và trả về các hàm resolvereject để điều khiển việc hoàn thành hoặc từ chối Promise đó. Tính năng này chưa chuẩn.
  • Ví dụ:
// Hiện tại có thể tạo thủ công:
function withResolvers() {
    let resolve, reject;
    const promise = new Promise((res, rej) => {
        resolve = res;
        reject = rej;
    });
    return { promise, resolve, reject };
}

const { promise, resolve, reject } = withResolvers();
promise.then(value => console.log(value));
resolve('Resolved manually!');

9. Promise.prototype.then(onFulfilled, onRejected)

  • Mô tả: Xử lý kết quả thành công hoặc thất bại của một Promise.
  • Sử dụng: Sử dụng khi cần xử lý kết quả trả về của một Promise.
  • Ví dụ:
let promise = Promise.resolve(42);
promise.then(result => {
    console.log(result); // 42
}, error => {
    console.error(error);
});

10. Promise.prototype.catch(onRejected)

  • Mô tả: Xử lý khi Promise bị từ chối (rejected).
  • Sử dụng: Dùng để bắt lỗi từ một Promise.
  • Ví dụ:
let promise = Promise.reject('Error occurred');
promise.catch(error => {
    console.error(error); // 'Error occurred'
});

11. Promise.prototype.finally(onFinally)

  • Mô tả: Được gọi khi Promise kết thúc, bất kể là thành công hay thất bại.
  • Sử dụng: Dùng để thực hiện các tác vụ cuối cùng sau khi Promise kết thúc, như dọn dẹp tài nguyên.
  • Ví dụ:
let promise = Promise.resolve(42);
promise.finally(() => {
    console.log('Promise ended');
}).then(result => {
    console.log(result); // 42
});

Tổng kết ngắn gọn về tất cả các Promise:

Promise MethodMô tảKết quảTrường hợp sử dụng
Promise.all()Chờ tất cả Promise hoàn thành. Nếu một Promise bị từ chối, tất cả sẽ bị từ chối.Một Promise chứa mảng kết quả của tất cả Promise nếu chúng hoàn thành thành công.Khi cần thực hiện nhiều tác vụ song song và yêu cầu tất cả phải thành công.
Promise.allSettled()Chờ tất cả Promise hoàn thành, dù thành công hay thất bại.Mảng các đối tượng có trạng thái (fulfilled hoặc rejected) và giá trị tương ứng (value hoặc reason).Khi cần biết kết quả của tất cả Promise mà không quan tâm lỗi.
Promise.any()Trả về Promise thành công đầu tiên, bỏ qua các Promise bị từ chối.Promise thành công đầu tiên.Khi cần tiếp tục xử lý ngay khi có một tác vụ thành công, không cần chờ tất cả.
Promise.race()Trả về Promise đầu tiên hoàn thành, dù thành công hay thất bại.Promise hoàn thành đầu tiên.Khi cần hành động dựa trên kết quả của Promise hoàn thành nhanh nhất.
Promise.reject()Trả về một Promise bị từ chối ngay lập tức.Promise bị từ chối với lý do.Khi cần khởi tạo Promise bị từ chối ngay lập tức.
Promise.resolve()Trả về một Promise đã được hoàn thành ngay lập tức.Promise hoàn thành với giá trị.Khi cần khởi tạo Promise hoàn thành ngay lập tức.
Promise.try() (Experimental)Thực thi hàm đồng bộ hoặc bất đồng bộ và tự động bắt lỗi.Một Promise, nếu hàm hoàn thành thành công hoặc lỗi nếu gặp vấn đề.Tính năng thử nghiệm để thực thi hàm và quản lý lỗi tự động.
Promise.withResolvers() (Experimental)Tạo một Promise với các hàm resolvereject để điều khiển trạng thái của nó.Trả về Promise và các hàm resolvereject.Khi muốn có quyền kiểm soát rõ ràng với việc hoàn thành hoặc từ chối của Promise.
Promise.prototype.then()Xử lý kết quả thành công hoặc thất bại của Promise.Promise với kết quả đã xử lý.Sử dụng để xử lý kết quả trả về của một Promise.
Promise.prototype.catch()Bắt lỗi khi Promise bị từ chối.Xử lý lỗi và trả về Promise mới.Sử dụng để bắt và xử lý lỗi của một Promise.
Promise.prototype.finally()Thực thi tác vụ sau khi Promise kết thúc, dù thành công hay thất bại.Thực hiện tác vụ sau khi Promise kết thúc và trả về một Promise.Dùng để dọn dẹp tài nguyên hoặc thực hiện hành động cuối cùng sau khi một Promise hoàn thành hoặc thất bại.