Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환한다. 주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부한다.
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
await Promise.all(
RankingList.map(async (x, i) => {
let [character] = await Character.find({ userId: x._id }, { equippedItems: 1 }).lean();
let equippedItems = [];
for (const j of character.equippedItems) equippedItems.push(items[j]);
//item_order 에 맞게 아이템 정렬
character.equippedItems.sort(
(a, b) => item_order.indexOf(a.category) - item_order.indexOf(b.category)
);
x.equippedItems = character.equippedItems;
x.rank = i + 1;
return x;
})
);
for (const i of RankingList) {
let [character] = await Character.find({ userId: i._id }, { equippedItems: 1 });
let equippedItems = [];
for (const j of character.equippedItems) equippedItems.push(items[j]);
equippedItems.sort(
(a, b) => item_order.indexOf(a.category) - item_order.indexOf(b.category)
);
i.equippedItems = equippedItems;
i.rank = r++;
}
Promise.all 이 우세한 성능을 보임
Promise.all 로 받으면 동시에 여러 Promise를 처리하기 때문.
for문 안에서 작업하는 경우 매 반복문에서 await으로 응답을 받을때까지 기다렸다 다음 반복문으로 넘어가기 때문에 Promise를 하나 하나 처리하면서 훨씬 낮은 성능을 보이기 때문
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/all