본문 바로가기
FRONTEND/Javascript

220801 Promise 를 이용한 값 대기

by 또야또야 2022. 8. 1.
반응형

Promise 를 이용한 값 대기

/**
 * 파라미터로 받은 token에서 정보를 확인 하여 저장
 * 데이터를 가져오는동안 token === null 이기 때문에,
 * 해당 구문이 동작하지 않기때문에 20ms 마다 가져오는 것으로 설정하였습니다.
 */
 function promiseTimeout (token) {
  if (!token) return // promiseTimeout(token)

  return new Promise((resolve, reject) => {
    // token 이 들어올때까지 20ms 마다 체크하기
    const interval = 20 // 임의로 20ms 로 설정 (20ms 마다 확인하기)
    let timeout = 1000 // 임의로 1s 로 설정

    const intervalId = () => {
      setTimeout(() => {
        // timeout 이 0 이 될 때까지 대기하기
        timeout -= interval

        // timeout 이 0 이하라면 token 값이 아주 안들어온다는 의미
        if (timeout < 1) {
          clearTimeout(intervalId)
          return reject(new Error('Token 이 없습니다.'))
        }

        // token 이 갑자기 들어오는 경우,
        // 모든 timeout 을 지우고 resolve 를 행합니다.
        if (token) {
          clearTimeout(intervalId)
          return resolve()
        }

        return intervalId()
      }, interval)
    }

    intervalId()
  })
}

// 처음엔 token 이 null 이었지만 어느순간 들어온경우
let token = null
setTimeout(() => { token = 'THIS_IS_TOKEN' }, 100)

promiseTimeout(token)
  .then(() => console.log('Token 이 들어왔어요!'))
  .catch((error) => { console.error(error) })
반응형

댓글