문제
Given two promises promise1 and promise2, return a new promise. promise1 and promise2 will both resolve with a number. The returned promise should resolve with the sum of the two numbers.
https://leetcode.com/problems/add-two-promises/
예시
코드
/**
* @param {Promise} promise1
* @param {Promise} promise2
* @return {Promise}
*/
var addTwoPromises = async function(promise1, promise2) {
return new Promise((resolve, reject)=>{
Promise.all([promise1, promise2]).then((values)=>{
resolve(values[0]+values[1]);
});
});
};
/**
* addTwoPromises(Promise.resolve(2), Promise.resolve(2))
* .then(console.log); // 4
*/
addTwoPromises는 Promise 객체를 반환해야 하며, 인자로 2개의 Promise를 받고, 두 개의 Promise의 resolve value를 합해주어야 한다. 두 Promise가 모두 이행되었을 때 더해주기 위해서 `Promise.all()`을 이용하였고, 두 promise에서 넘어온 value는 values에 배열 형식으로 저장되어있다. 따라서 values[0]과 values[1]을 더해서 resolve의 인자로 넣어주었다.
💡Promise
상태
- 대기 pending : 초기 상태.
- 이행 fulfilled : 연산이 성공적으로 완료됨
- 거부 rejected : 연산이 실패함
생성자
- Promise()
- 새로운 Promise 객체 생성.
정적 메서드
- Promise.all(iterable)
- 주어진 모든 프로미스가 이행 OR 한 프로미스가 거부될 때까지 대기하는 프로미스 객체
- Promise.allSettled(iterable
- 주어진 모든 프로미스가 처리(이행 OR 거부) 될 때까지 대기하는 프로미스 객체
- Promise.any(iterable)
- 주어진 모든 프로미스 중 하나라도 이행하면 그 값으로 이행하는 프로미스 객체
- Promise.race(iterable)
- 주어진 모든 프로미스 중 하나라도 처리될 때까지 대기하는 프로미스 객체
- Promise.reject(reason)
- 주어진 사유로 거부하는 프로미스 객체
- Promise.resolve()
- 주어진 값으로 이행하는 프로미스 객체
사용 예시
// 새로운 Promise 객체 생성
let myFirstPromise = new Promise((resolve, reject) => {
// exeucutor
// executor는 Promise 생성 시 자동 실행됨.
// 이 안에서 resolve나 reject 둘 중 하나는 호출해야함.
// resolve(value) - 일이 성공적으로 완료되었을 때 결과 value와 함께 호출해야함.
// reject(error) - 에러 발생 시 에러 객체를 나타내는 error와 함께 호출해야함.
// EX)
// 1초 뒤에 일이 성공적으로 끝났다는 신호가 전달되면서 result는 '완료'가 됨.
setTimeout(() => resolve("완료"), 1000);
});
// 만든 Promise 객체 사용
myFirstPromise.then((result, error)=>{
console.log(result); // 1초 후 완료가 출력됨.
});
728x90
'Algorithm > leetcode' 카테고리의 다른 글
[leetcode][JS] 2725. Interval Cancellation (0) | 2024.02.11 |
---|---|
[leetcode][JS] 2724. Sort By (0) | 2024.02.08 |
[leetcode][JS] 2704. To Be Or Not To Be (0) | 2024.02.02 |
[leetcode][JS] 2703. Return Length of Arguments Passed (0) | 2024.02.02 |
[leetcode][JS] 2695. Array Wrapper (0) | 2024.01.31 |