Hỏi ví dụ thực tế trường hợp cần sử dụng Promise.any và Promise.race

Chào anh chị và các bạn,

Trường hợp Promise.all thì quá phổ biến.

Promise.any em có dùng trong 1 trường hợp thực tế.


const f1 = () => new Promise(res => setTimeout(() => res(1), 1000));
const f2 = () => new Promise(res => setTimeout(() => res(2), 2000));
const f3 = () => new Promise(res => setTimeout(() => res(3), 3000));

Promise.any([f3(), f2(), f1()]).then(console.log);

Footer của web cần hiện nhiệt độ, dự báo thời tiết, hàm f1(), f2(), f3() là 3 hàm fetch đến 3 dịch vụ API dự báo thời tiết khác nhau. Do dùng free nên API delay cao. Call đồng thời cả 3 hàm, cái nào resolve trước thì dùng vì kết quả như nhau.

Ngoài trường hợp trên thì còn trường hợp nào cần dùng Promise.any nữa không?

Còn Promise.race em chưa nghĩ ra trường hợp nào cần sử dụng hết.

1 Like

dùng race khi có hành đông xen ngang làm kết thúc việc call các promise khác

2 Likes

Anh cho em xin case cụ thể hoặc code demo được không? Một promise pending lâu quá cần hủy nó hả? VD chức năng tìm kiếm sản phẩm, user search keyword “ABC” cần chờ 10s để server response, nhưng mới 3s trôi qua mà user gõ keyword khác là “XYZ” thì UI list item bị nhấp nháy, UI sẽ hiện list Item tương ứng với keyword “ABC”, sau đó biến mất và đổi thành list Item tương ứng với “XYZ” ?

có 3 API để upload 1 file hình lên 3 server a.com, b.comc.com
chỉ cần up lên 1 server là xong. không cần up lên 3 server vì backend có cơ chế đồng bộ

thì làm thế nào cho nhanh nhất?

nếu up lên a.com -> fail -> b.com -> fail -> c.com
thì mỗi lần gọi vậy giả sử mất 10s -> người dùng phải chờ 30s chỉ để up 1 cái file

thế nên mới up đồng thời, thằng nào xong trước, là huỷ những thẳng còn lại
-> xài Promise.any và Promise.race

race khác any ở phần reject
với race, chỉ cần 1 thằng reject là huỷ hết những thằng còn lại và return
còn any, mọi thằng phải reject mới return

vậy với ví dụ upload trên. nên chọn any hay race sẽ hợp lý?

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?