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

home2 게시판 JavaScript, TS 게시판 promise 질문

promise 질문

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

    frysweet
    참가자

    선생님 promise 스코프에 대해 질문 있습니다.

    promise.resolve() 예시를 찾아보다가, resolve 가 다음 .then()으로 제대로 넘어가지지 않는 예시를 공부했는데요.
    promise.resolve().then()의 .Then() 안에 promise.resolve () 가 있는데 이 부분이 실행이 완료되기  전에 다음 .then()으로 넘어가서 promise.resolve() 값이 다음 .then()에 제대로 안받아지므로,  promise.resolve().then()을 사용하지 말고, new Promsie를 써야 한다는 내용입니다.

     

    그런데 제가 이해가 안가는 점은...

    1.
    promise.resolve().then() 의 then() 안에서  promise.resolve() 를 리턴하는 코드나,
    new Promise() 안에 있는 resolve()를 리턴하는 코드나, 

    promise.resolve() 의 블록 스코프 또는 new Promise() 블록 스코프에서 resolve를 직접적으로 리턴받지 않고, 
    xhr.onreadystatechange = function () { } 블록 안에서 resolve 를 만들고, 
    xhr.onreadystatechange  에 할당되어 있을 뿐입니다.

     

    이러면 resolve는 promise.resolve().then() 안이나 new Promise() 안에서 받아지는 것이 아니고, 
    xhr.onreadystatechange 에 할당되어질 뿐이고,

    생성된 resolve()는 xhr.onreadystatechange 스코프 안에서만 유효한건데,

    어떻게 다음에 이어지는 .then()에 resolve 값이 전달될까요??

     

     

    2. 

    또 promise.resolve().then() 의 .then() 안의 코드 xhr.onreadystatechange = function ~ 가 아직 다 실행 안됬는데, 왜 다음 .then()으로 넘어갈까요??

     

    #28390

    codingapple
    키 마스터

    윗 예시는 약간 이상한 코드인듯요 Promise.resolve() 이건 즉시 성공하라는 뜻이라 존재가 딱히 의미없는 코드입니다

    윗예제는 바로 return Promise.resolve() 해버려서 바로 성공판정내려서 promise.resolve().then().then() 이 실행되는듯요 

     

    밑의 예제는 resolve() 시에

    new Promise(function(resolve, reject 

    여기서 만들었던 resolve() 가 잘 실행되는듯요

    자바스크립트는 변수쓸 때 현재 함수안에 없으면 바깥함수에서 찾아서 씁니다 

     

    #28400

    frysweet
    참가자

    밑의 예제에서
    reolve() 가 내부 함수인 xhr.onreadystatechange 안에서 resolve() 가 되는데 
    왜 바깥 함수인 new Promise(function(resolve, reject) => 블록의 resolve() 가 되는지 모르겠어요 

    내부 함수에서 resolve() 하면, 내부함수 스코프에서만 해당 되는것 아닌가여??

    #28446

    codingapple
    키 마스터

    함수쓴다고 Promise가 하나 더 생성되진 않습니다

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

About

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

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

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