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

home2 게시판 JavaScript, TS 게시판 Promise 의 scope 관련 질문

Promise 의 scope 관련 질문

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

    frysweet
    참가자

    선생님 프로미스 스코프 관련해서 헷갈리는 부분이 있어 올립니다.

    -> https://github.com/frysweet/Js_object

    1.

    this.Ready = new Promise 를 할당한 후, 바로 밑줄에서

    Promise.resolve()
    .then() 이 나오는데요 -> 여기에서의 'Promise' 가 this.Ready에 할단된 'new Promise' 랑 같은 프로미스 인가요?

     

     

    2.

    https://github.com/frysweet/Js_object

    제일 하단 줄에 보시면,

    this.isReady = Module.isReady.then( () => {
       안에서 onReady(); 를 실행하고 있는데요.

    여기서 onReady가 맥락상 제일 위쪽줄  코드에서 작성된 onReady() 가 되어야 할 것 같은데..
    Module.isReady 프로미스 안에도 onReady가 들어있거든요. (Module = core.ts 의 new Core() : Core 클래스 안에도 onReady()가 선언되어 있습니다.)

    Module.isReady.then() 의 .then()은 Module.isReady 프로미스를 리턴하니까,
    .then() 안에서 실행되는 함수는 스코프상 Module.isReady 프로미스의 onReady() 가 실행되어야 하는것인지..

    아니면 이 파일 (edit.ts) 의 맨위쪽줄에 작성되어 있는 onReady()가 실행되는것이 맞는지, 
    그렇다면 이유가 무엇인지 궁금합니다..

    스코프 너무 헷갈립니다...ㅠㅠ

    #15848

    codingapple
    키 마스터

    1번은 그냥 Promise.resolve() 라고 쓰면

    새로운 new Promise 새로 만들고 바로 resolve() 하라는 뜻입니다 바로 then()이 실행될듯요

    2번은 제일 하단에 있는 onReady()는 

    위에있는 let onReady 함수를 실행해줍니다

    중간의 if문 걸리면 그 안에 있는 onReady를 실행해줄듯요 

    #15890

    frysweet
    참가자

    답변 감사합니다.
    몇가지 헷갈리는 점이 있는데요.

    1.
    새 프로미스 스코프의 .then() 안에 맨 마지막줄에서 onReady() 를 실행시키면 그냥 resolve() 인데 그냥 실행시키는 이유가 무엇일까요?

    2.
    제일 하단 Module.isReady.then() 의 Module.isReady 는 new Core() 에서 만들어진 프로미스이고, 그안에 선언되어 있는 onReady() 가 있는데, 

    프로미스 체인인 .then() 에서 Module.isReady의 프로미스안의 onReady() 를 안쓰고, 제일 윗줄에 선언되어 있는 let onReady 나 if 문의 onReady()를 사용하는 이유가 무엇인가요?

    #15894

    codingapple
    키 마스터

    1번은 500ms 후에 처리되라고 setTimeout 걸어준거같은데 그럼 0.5초후에 성공판정이 될듯요? 

    Module.isReady.then() 안의 코드는 Module.isReady가 성공판정이 내려지면 내부 코드 실행해주세요~ 라는 뜻이기 때문에

    위에 말고 저 다른 쪽에 있는 onReady() 그거랑은 상관없는듯요 

     

    #16090

    frysweet
    참가자

    답변 감사합니다 덕분에 이해했어요 😀
    프로미스가  좀 어려워서 예제들을 찾아보면서 변형하면서 공부하고 있는데요.
    async 함수로 프로미스 만들어서 프로미스 체인 만들어서 성공시켰는데..

    보시면 getApple().then( ) 의 .then() 안에 들어있는 getBanana() 에 getApple 에서 리턴한 apple 데이터를 넘겨주지 않았음에도,
    getBanana().then() 의 .then() 안에서 apple 을 잘 받아서 사용하고 있거든요. 

    getBanana() 다음의 .then()을 getApple.then() 바깥으로 빼버리면 apple is undefined 에러 뜨구요.

    그 이유가 getApple.then() 안에 들어있어야,  스코프 안에  적용받을 수 있기때문이것은 알겠는데요.
    문제는 getApple.then() 안에서 처음 연결된 getBanana() 프로미스는 apple을 안받았는데도 그 다음 .then() 체이닝에서는 왜  apple 을 받을 수 있는 것인지 이유가 궁금합니다.

    #16097

    codingapple
    키 마스터

    promise와 상관없이 그냥 ${apple} 이 부분에서 apple 변수를 쓰겠다고 했는데

    그럼 컴퓨터는 주변 둘러보며 가장 가까운 변수를 찾습니다

    가장 가까운 변수는 바깥 함수에 있는 apple 이라는 파라미터변수고 그거 가져다 씁니다 그 값은 아마 'Apple'이겠군요

    #16143

    frysweet
    참가자

    답변 감사합니다.

    정리하면 , getApple().then() 의 .then() 안에 넣은, 화살표 함수안에서 .then ( apple => { }) 식으로 .then() 이전 단계의 프로미스가 리턴한 데이터를 화살표 함수의 인자(apple) 로 넘겨주면, => {} 안의 {}스코프에서 사용 가능  
    <- 이렇게 이해하면 맞나요??

    #16151

    codingapple
    키 마스터

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

About

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

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

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