ES6+ 비동기 프로그래밍과 실전 에러 핸들링

Yejung·2022년 8월 24일
0
post-thumbnail

https://www.youtube.com/watch?v=o9JnT4sneAQ&list=PLxtfsEgwB_8fPhoDrX9QSJH8MWy0eLuLI&index=287

강의 정리본

에러는 발생을 해야 잡을 수 있다!
에러가 발생해서 바깥으로 나오는 것이 중요


function* map(f, iter) {
  for(const a of iter) {
    yield a instanceof Promise ? a.then(f) : f(a);
  }
}

async function reduceAsync(f, acc, iter) {
  for await (const a of iter) {
      acc = f(acc, a);
    }
  return acc;
}

const f2 = imgs => 
 	 reduceAsync((a, b) => a + b, 0, 
         map(img => img.height,
             map({url}) => loadImage(url), imgs))); 
 

f2(imgs).catch(_ => 0).then(log);
f2(imgs2).catch(_ => 0).then(log);

어떤 함수를 작성할 때 부수효과를 일으키는 건 그닥 좋은 코드가 아니다

에러 핸들링을 하지 않는게 좋은 코드?

imgs2 처럼 잘못된 인자를 전달할 수도 있는 개발자가! 에러 핸들링을 할 수 있도록 해야한다
미리 에러 핸들링 하는 것은 함수에 제약을 걸어두는 것 + 제대로 에러를 못 잡을 수도 있다
(오.... 그렇구나....)

# 정리

- Promise, async/await, try/catch 를 정확히 다루는 것이 중요

- 제너레이터/이터레이터/이터러블을 잘 응용하면 코드의 표현력을 더할 뿐 아니라 에러 핸들링도 더 잘할 수 있다 

- 순수 함수에서는 에러가 발생되도록 그냥 두는 것이 낫다

- 에러 핸들링 코드는 부수효과를 일으킬 코드 주변에 작성하는게 좋다

- 불필요하게 에러 핸들링을 미리 해두는 것은 에러를 숨길 수 있다
ex) try-catch 문을 쓰고 아무것도 안하는 코드는 최악의 코드

최대한 바깥에서만 부수효과를 일으키는게 좋은 함수라고 생각한다... 고 말씀하심...!

어렵다...........!

profile
이것저것... 차곡차곡...

0개의 댓글