Có vẻ như bạn đang chạy nhiều mã hơn trong phiên bản song song
// The normal version
let normal = await ContentRepo.geBySkillIdWithSourceFiltered(
[chosenSkillsArr[0].sid!],
readContentIds,
body.isVideoIncluded,
true,
true
);
// The code inside the parallel version:
chosenSkillsArr.map(async (skill: IScrapeSkillDocument) => {
const result = await ContentRepo.geBySkillIdWithSourceFiltered(
[skill.sid!],
readContentIds,
body.isVideoIncluded,
true,
true
);
})
[chosenSkillsArr[0].sid!], vs chosenSkillsArr.map()
Đối với phiên bản song song, bạn đang đặt lệnh gọi hàm (ContentRepo.geBySkillIdWithSourceFiltered
) bên trong một vòng lặp. Đó là lý do tại sao nó chậm hơn.
Đối với câu hỏi về việc chạy các lời hứa song song:
Giống như Promise.all
, Promise.allSettled
chờ đợi nhiều lời hứa. Nó không quan tâm đến thứ tự mà chúng giải quyết, hoặc liệu các tính toán có đang chạy song song hay không. Cả hai đều không đảm bảo tính đồng thời cũng như ngược lại. Nhiệm vụ của họ chỉ là đảm bảo tất cả các lời hứa được chuyển đến nó đều được xử lý.
Vì vậy, bạn không thể đảm bảo tính song song của việc thực hiện lời hứa theo cách thủ công
Đây thực sự là một bài viết thú vị
giải thích tính song song và Promise.All
và API Nodejs của trình duyệt khác với API Nodejs được cài đặt trên máy tính của bạn như thế nào về tính song song.
Đây là phần trích kết luận của bài báo:
Ghi chú bên lề:
Có một sự khác biệt nhỏ:
-
Promise.all:Chỉ giải quyết khi tất cả các lời hứa được chuyển cho nó được giải quyết, nếu không nó sẽ từ chối với lỗi lời hứa bị từ chối đầu tiên.
-
Promise.allSettled:Sẽ luôn được giải quyết với một mảng có thông tin về các lời hứa đã giải quyết và bị từ chối.