node js(java script) 함수의 순서고정 도움 부탁드려요 ㅠㅠ

조회수 515회

안녕하세요, 이번에 처음 서버를 만들어보는 초보 개발자입니다. 서버를 만드는데 함수를 실행하려고 합니다.

func a();
func b();
func c();
func d();
func last();

이렇게 다섯 가지 함수의 순서를 정하려고하는데, 제가 함수 a(), b(), c(), d(), last()last() 함수가 마지막에 실행되기를 원합니다.
a -> b -> c -> d - > last, 이렇게 모든 순서를 동기식으로 정해버리면 node js 비동기성의 장점을 못살리는 것 같아서요.
(a , b , c, d) -> last 이런 방식으로 순서를 정하고싶습니다. 괄호 안의 순서는 상관없이, 비동기식으로 작동하고 싶어요!
좋은 방법이 있을까요?

덧붙이자면 a, b, c, d 등등의 함수는 데이터베이스에서 데이터를 가져오는 함수고
last함수는 가져온 데이터를 바탕으로 랜더링을 실행하는 함수입니당..

1 답변

  • 일단 a,b,c,d는 모두 promise를 리턴해야 합니다.

    보통 DB에서 가져오는건 커넥터(어댑터, 드라이버 등등으로 불립니다.) 라이브러리를 사용하실텐데 해당 라이브러리의 비동기 함수 리턴값이 promise인지 확인하시고

    리턴값이 promise가 아니라면 promise를 리턴하도록 wrapping하는 함수를 만드세요.

    그런 후,

    Promise
        .all([a(), b(), c(), d()])
        .then(() => last())
    
    // 혹은
    (async () => {
        await Promise.all([a(), b(), c(), d()]);
        last();
    })();
    

    다만 위의 코드에서 예외 처리는 신경써서 해 주어야 합니다. a,b,c,d 중 어디에서 에러가 났는지 .catch() 혹은 try catch 문에서 확인이 가능하도록 미리 설계하고 사용하시는게 좋습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)