하루 30분 TIL

220914 TIL

devSoo 2022. 9. 15. 01:07

Facts(사실/ 객관)

1. 디자인 시스템에 대해 논의함

2. 팝업관리 기획/디자인 세션을 가졌다.

3. 팝업관리의 경우 기획 변경사항이 생겨 보류됐다.

4. 관리도구 코드를 보고 있는데 플랫폼 코드구조와 많이 달라 살펴보고 있는 중이다.

 


 

Findings(배운점)

1. 어렴풋이 알고 있던 == 와 === 차이에 대해서 배웠다. 

 == 연산자는 두 피연산자의 타입이 다를 경우 자동으로 일부 피연산자의 타입을 변환 후 값을 비교한다. 

  • 1) 10 == '10' 
    하나가 숫자형이고 다른 하나가 문자열이면 문자열을 숫자로 변환 후 값을 비교
  • 2) true == 1 
    불리언 값이 존재하면, 불리언 값을 1로 변환후 값을 비교
    3) true === '1'
    불리언 값은 1로 변환되고 그럼 1번과 같은 로직으로 1 == 1로 비교 
    4) true == 'true' 
    true는 1로 변환되지만 문자열 'true'는 숫자로 변환 불가 

=== 연산자는 타입을 변환하지 않으므로 엄격한 방식이다. 

 

2. forEach 함수는 비동기(async) 함수를 기다려주지 않는다는 걸 알게 되었다. 
그렇다면 순차 진행을 원할때는 어떻게 할까? 

1) for of 

genres = [];

for (const value of wantedGenres) {
    const g = await Genre.findOne({ name: value });
    genres.push(g);
}

 

순차적으로 진행할 수 있지만 forEach와 달리 병렬로 처리되지 않으므로 소요시간이 오래 걸림 

 

2) Promise.all

let genres = [];

const promises = wantedGenres.map(async (value, index) => {
    const g = await Genre.findOne({ name: value });
    genres.push(g);
});
await Promise.all(promises);

순차적으로 진행하되 위와 같이 병렬로 처리도 가능하다
각 비동기 함수들을 promises 배열에 저장 후 Promise.all을 사용해 모든 비동기 함수를 동시에 실행할 수 있다. 

3. entries를 활용해 for of에도 index 접근 가능하다 

genres = [];
// entries()는 인덱스/키 쌍의 새로운 배열을 반환한다
for (const [index, value] of wantedGenres.entries()) {
    const g = await Genre.findOne({ name: value });
    genres.push(g);
}