Promise.all

jathazp·2022년 4월 5일
0

1. Promise.all

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"]

2. 예시

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

0개의 댓글