인프런 커뮤니티 질문&답변

Like me black님의 프로필 이미지

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

resolve( ) 에 대해 질문드립니다

해결된 질문

22.03.20 11:40 작성

·

187

0

강사님 안녕하세요

resolve( )에 대해 질문드리고 싶습니다

 

아래의 소스코드를 봐주시면

setInterval( )이 1초마다 

resolve(message)를 실행해줍니다.

.then((message)=>{
        return new Promise((resolve, reject)=>
        {
            setInterval(()=>{
            console.log('1초마다 실행');
            resolve(message);},1000);
        });
    })
    .then((message2)=>{
        return new Promise((resolve, reject)=>
        {
            setTimeout(()=>{
                console.log('0.5초 후 실행');
                resolve(message2);},500);
        });
    })

그런데, 다음 .then( )으로 간 경우는
첫 번째 resolve(message) 일 때 뿐이었고

setInterval( ) 으로 1초마다 반복해서

resolve(message) 를 호출해도

resolve(message)를 2번째 호출할 때부터는 

다음 .then( ) 구문으로 가지 않았습니다.

 

그래서 원인을 생각해봤는데, 

resolve( )만 리턴해서 그런 게 아닐까 라는 생각이 들었습니다

setInterval( ) 이 resolve( ) 뿐만 아니라, promise( resolve( ) )를 반복하게 해봤습니다

.then((message)=>{
        return setInterval(()=>{ new Promise((resolve, reject)=>
        { 
            console.log('1초마다 실행');
            resolve(message);
        });
     } ,1000);
    })

그러나 이번에도 2번째 호출부터는 다음 .then 으로 넘어가지 않았습니다

 
이번에는 then의 콜백 자체를 감싸봤습니다

  .then(setInterval((message)=>{
        return new Promise((resolve, reject)=>
        {
            console.log('1초 후 실행');
            resolve(message);
        });
        },1000))

그래도 결과는 마찬가지였습니다
그래서 혹시 그 이유가 궁금해서

setInterval( ) 로 resolve( message ) 또는 new promise( resolve( message ) ) 또는 then의 콜백함수까지 반복 호출해도 
2번째 호출 부터는 다음 .then 으로 넘어가지 않는 이유에 대해 질문드리고 싶습니다

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2022. 03. 20. 12:08

then은 일회성입니다. 여러번 resolve를 호출한다해도 then이 여러번 호출되지 않습니다.

Like me black님의 프로필 이미지
Like me black
질문자

2022. 03. 20. 12:19

가르쳐주셔서 감사합니다

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2022. 03. 20. 15:23

현재 제 유튜브에서 js 고급 강좌 하고 있으니 그것도 같이 봐보세요.

Like me black님의 프로필 이미지
Like me black
질문자

2022. 03. 20. 16:21

오 인간 JS 엔진되기 강좌인가요? 네 고맙습니다