Promise.all là gì? Promise.all giúp tối ưu performance thế nào?

1336
Promise.all là gì

Tất cả những gì bạn biết về Promise.all là gì ? Bạn đã dùng Promise.all khi nào? Performance khi dùng Promise.all thế nào? Những câu hỏi này, chúng ta sẽ cùng thảo luận trong bài viết này. Hy vọng, bạn có thể làm nhiều thứ hơn khi đọc xong bài viết này.

  4 lỗi check Conditionals trong JavaScript mà new Dev thường mắc và cách khắc phục
  Tổng hợp 6 Thủ Thuật JavaScript hữu ích

Tất cả những gì bạn biết về Promise.all là gì?

Promise trong JavaScript là một trong những API mạnh mẽ giúp chúng ta thực hiện các Async operations. Promise.all đưa Async operations lên một trình mới vì nó giúp chúng ta controls được một group Promises.

Xem thêm API là gì.

Promise.all giúp chúng ta cải thiện được performance về các yêu cầu như send mail hàng loạt.

Cú pháp cơ bản:

Trong đó Promise1, Promise2, Promise3 là những promise và Promise.all giúp giải quyết khi tất cả promises được giải quyết hoặc bất kỳ một trong số chúng bị reject.

Một vài ví dụ cho thấy Promise.all lợi hại thế nào:

Notes: Promise.all sẽ trả về các value tương ứng với thứ tự promises được đưa vào trong array.

Bạn đã dùng Promise.all khi nào? 

Có rất nhiều trường hợp để sử dụng Promise.all nhưng qua các dự án thì chúng tôi thường thấy đa số là xảy ra 2 trường hợp sau đây (được dùng nhiều và hiệu quả).

Send Email

Giả sử bạn là một người Marketing và bạn muốn send email tới nhiều khách hàng có thể là hàng ngàn email. Thông thường thì chúng ta sẽ làm điều gì đó như thế này:

Ví dụ trên là đơn giản. Nhưng nó không tốt nếu nói về performance. Có thể hơn stack sẽ quá nặng tại một thời điểm nào đó và , JavaScript sẽ có một số lượng lớn kết nối HTTP có thể giết chết máy chủ của bạn. Vậy một cách nào an toàn hơn. Một cách tiếp cận thực hiện đơn giản sẽ được thực hiện theo từng đợt.

Lấy 100 (ví dụ) email đầu tiên, phát tín hiệu gửi đi và đợi cho đến khi tất cả các kết nối HTTP được đóng lại. Và sau đó lấy đợt tiếp theo và cứ như thế. Nó tránh được việc server quá tải.

Ví dụ :

Thật ra bạn nào mà chưa hiểu ví dụ vì sao lại sử dụng slice thì nên xem lại mình đi nha.

Giải thích cho những devjs nào đang ngáo đá đó là sử dụng slice trong trường hợp này sẽ giúp vận chuyển từng đợt khoảng 100 items và khi xử lý tiếp theo thì lấy tiếp.

Xem ví dụ sau để hiểu hơn https://jsfiddle.net/anonystick/ny1vt0g2/8/

Rất đơn giản nhưng nếu bạn không biết thì sẽ là vấn đề lớn cho việc gửi mail với số lượng lớn.

Get API

Một trường hợp khác, nếu bạn có task là tổng hợp một thông tin lấy nhiều nguồn từ nhiều API. Không cách nào dễ dàng và tốt khi sử dụng Promise.all trong trường hợp này.

Ví dụ như thế này:

Kết luận

Promise.all là cách tốt nhất để controls một group promise với một promise duy nhất. Đây là một trong những cách mà lập trình viên có thể tận dụng được các công việc nhanh hơn. Hy vọng qua bài này, giúp các bạn hiểu thêm và trong trường hợp nào có thể sử dụng chúng.

Tham khảo: 

  • developer.mozilla.org
  • medium.com
  • morioh.com

Có thể quan tâm:

Xem thêm việc làm JavaScript Developer trên TopDev

TopDev via Anonystick.com

  Method Chaining trong JavaScript là gì
  20 câu hỏi phỏng vấn Javascript dành cho Intern/Fresher