미주알고주알

[Javascript] Promise.all 메소드 직접 구현하기 본문

Javascript

[Javascript] Promise.all 메소드 직접 구현하기

미주알고주알 2023. 3. 24. 16:26

`Promise.all` 은 여러 프로미스를 병렬적으로 처리하는 기능을 갖고 있다.

이런 `all` 메소드를 직접 구현해보면 다음과 같다.

 

인자로 들어온 프로미스 배열은 모두 `pending` 상태로 변환되어야 하기 때문에, 결과를 담는 `results` 변수 안에 각각의 프로미스의`then` 또는 `await` 된 `result`으로서 들어와야 한다. 

 

// method1
const promiseAll = async promises => {
	const results = [];
	for (let i = 0; i < promises.length; i += 1) {
		results[i] = await promises[i](i + 1);
	}
	return results;
};

// method2
const promiseAll = async promises => {
	const results = [];
	const rs = promises.map((p, i) => p(i + 1));
	for await (const r of rs) {
		results.push(r);
	}
	return results;
};