디버깅 및 약속 연습

3982 단어
디버깅 기술은 개발을 처음 접하는 사람이 습득하기 가장 어려운 것 중 하나이므로 시간을 내어 저를 당황하게 했던 연습 몇 가지를 공유하고자 합니다. 이것을 시도하십시오!

두 가지 기능이 있습니다.
  • getResult는 성공할 확률이 50%이고 거부할 확률이 50%인 Promise를 반환합니다.
  • testGetResult는 getResult를 호출하고 출력을 한 번 기록합니다.

  • 다음은 귀하에게 제공된 구현입니다.

    getResult



    getResult는 Promise를 반환하는 비동기 함수입니다. Promise는 1000밀리초 내에 거부 또는 해결되며, 거부 또는 해결 여부는 생성된 변수에 따라 다릅니다. 변수는 -0.5에서 0.5 사이의 값을 갖습니다. 즉, 변수가 양수일 확률이 50%입니다. 변수가 음수이면 거부합니다. 간단하죠?

    const getResult = async () => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          let number = Math.random() - 0.5
          if (number < 0) { reject("failure") }
          resolve("success")
        }, 1000)
      })
    }
    


    getTestResult는 훨씬 더 간단합니다.result라는 변수를 시작하고 단순히 getResult()에서 Promise를 가져옵니다. 그런 다음 성공 여부를 기록합니다.

    getTestResult



    async function testGetResult() {
      let result = await getResult()
    
      result.then((res) => console.log(res))
            .catch((err) => console.log(err))
    }
    

    문제



    이 예제를 실행할 때 노드에서 오류가 발생합니다.

    node:internal/process/promises:246
              triggerUncaughtException(err, true /* fromPromise */);
              ^
    
    [UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "failure".] {
      code: 'ERR_UNHANDLED_REJECTION'
    }
    


    무엇이 잘못되었나요?

    며칠 안에 답변으로 게시물을 업데이트하겠습니다 :)

    08/01 업데이트

    힌트: getResult()에서 반환되는 유형은 무엇입니까?

    좋은 웹페이지 즐겨찾기