• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 node.js와 동기적 반복

node.js와 동기적 반복

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #29923

    정범석
    참가자

    coding apple님 감사합니다!  만들어주신 강의 열심히 잘 수강하고 있습니다. 덕분에 독학하는데 있어서 큰 도움이 되고 있습니다.

    다름이 아니라 제가 강의를 들으면서 강의 내용을 응용하여 웹서비스를 만들고 있는데 기능들을 만들다 보니 한가지 관문에 부딛히게 되었습니다.

     

    제가 만들고 싶은 기능을  설명드리면, 사용자가 특정 데이터를 검색하면 mongoDB에서 그 데이터가 포함된 DOC를 먼저 찾고, 

    그 DOC안의 어떤 배열 데이터를 가져와서 그 배열 데이터의 각각의 원소들을 또 mongoDB에서 찾아서 , 찾은 DOC안의 배열 데이터를 

    또 mongoDB에서 검색하는 작업을 반복하다가 검색한 배열의 원소들로 찾은 DOC의 배열에 더이상 어떤 정보도 들어있지 않을 때까지

    반복하는 작업입니다.

     

    아마 관문이 무엇이었을지 바로 아셨을거라고 생각되는데요.

    node.js의 비동기적인 방식 때문에 반복문 안에 그냥 mongodb의 컬렉션에 접근하여 작업을 하라는 코드를 집어넣으면, 

    반복문이 돌아갈때마다 각각의 변수들은 mongoDB 접근 코드까지는 와서 살아있지만,

    모든 반복문이 돌아간 후에 mongoDB 접근 작업을 몰아서 하는 것인지,

    맨 mongoDB접근 코드의 콜배함수 안에서는 맨 마지막 변수만 살아있어서 그 변수로만 반복횟수만큼 작업을 해버린다는 점입니다.

     

    수많은 구글링과 고뇌를 통해서 결국 Promise와 반복횟수를 세는 다른 변수를 만들고 조건문을 반복문 안에 넣어서 탈출하는 방식으로 해결한 듯 하였으나 콜백이 실행되는 속도가 그때그때 다른 것인지 출력되는 값의 개수와 값은 항상 똑같지만 값들의 순서가 실행할 때마다 달라진다는 문제가 있었습니다.

     

    결국 찾은 변수들을,  반복문 밖에서 정의된 변수를 활용한 키의 값으로 하는 객체형식으로 저장하는 것으로 해결되기는 하였습니다만,

    웹서비스를 계속 진행해나가면서 비슷한 류의 기능을 몇번 더 만들어야 했고 그때마다 제가 해결한 방식은 무언가 데이터의 낭비와 작

    업이 너무 투박하다는 느낌을 지울 수가 없어서 결국 질문하게 되었습니다.

     

    이런 문제를 해결하기 위한 좋은 방법은 무엇인지, 혹시 node.js안에서 코드를 동기적으로 쓸 수 있는지 두가지가 궁금합니다.

     

    #29943

    codingapple
    키 마스터

    array 에 있는 내용으로 doc을 찾아오고 싶으면 in연산자 쓰면 됩니다

    { 글제목 : { $in: [ 5, 10 ] } } 이런거 쓰면 글제목 : 5 아니면 10인거 다 찾아줍니다

    mongodb에서 데이터찾아오는 함수는 언제나 비동기적으로 처리됩니다 then 쓰거나 await 써야 찾기 완료후 코드실행이 가능합니다

    여러가지 비동기 요청을 한 번에 기다리려면 Promise.all 쓰거나 하면 됩니다 

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠