자바스크립트 프라미스 작성하기

4128 단어
약속을 설명하는 이전 기사를 읽으려면 여기로 이동하십시오.
https://tuts.alexmercedcoder.com/promises/

약속 만들기



그래서 만약 당신이 나의 이전 기사를 읽는다면 우리는 프라미스가 무엇인지 그리고 fetch나 axios와 같은 함수가 그것들을 우리에게 반환할 때 그것들을 어떻게 사용하는지 배웠습니다. 이 기사에서는 자신의 약속을 작성하는 방법을 보여 드리겠습니다.

Promise를 쓰는 이유



기본적으로 다음 질문에 모두 yes 응답이 나오면 Promise를 작성해야 합니다.
  • 다른 일이 완료되었을 때만 해야만 하는 일이 있어요
  • 내 코드의 나머지 부분이 앉아서 다른 작업이 완료될 때까지 기다리고 싶지 않습니다.

  • 이것이 바로 우리가 수용할 수 있는 약속의 상황입니다.

    기본적인 약속 작성하기



    const myPromise = new Promise((resolve, reject) => {
      setTimeout(() => {
        if (true) {
          resolve("The Promise has resolved")
        } else {
          reject("your promise has failed")
        }
      }, 3000)
    })
    
    myPromise
    .then(value => console.log(value))
    .catch(err => console.log(err))
    .finally (()=>console.log("Either Way I happen"))
    

    그래서 위에서 무슨 일이 일어났습니까?
  • 새로운 변수 myPromise를 생성합니다.
  • 변수에 새로운 약속을 할당합니다.
  • Promise 생성자에 함수가 전달됨
  • Promise 함수는 항상 resolve/reject(때로는 done/fail로 명명)로 전달되는데, 이는 Promise가 끝나는 시점을 결정하는 기능입니다.
  • setTimeout이 3초(3000밀리초) 내에 함수를 실행하도록 설정됨
  • 시간 초과가 끝나면 if 문이 평가됩니다.
  • true로 평가되면 resolve 함수가 문자열 값을 약속 값으로 보내는 것을 호출하면 이 약속에 대한 모든 .then 호출이 실행될 수 있습니다.
  • false로 평가되는 경우 거부 함수는 이 약속에 대한 .catch 호출이 오류를 가져오고 실행하도록 하는 오류 메시지 전달을 호출합니다.
  • 약속의 성공 여부에 관계없이 모든 .finally 호출이 실행됩니다
  • .

    if(true)를 if(false)로 변경하는 것을 제외하고 위의 코드를 다시 테스트하고 결과가 어떻게 변경되는지 확인합니다.

    그게 다야, 완료가 다른 코드를 프라미스로 트리거해야 하는 코드를 래핑하고 비동기 자바스크립트의 세계를 즐기십시오.

    염두에 두어야 할 사항


  • .then 호출은 약속을 반환하므로 해당 .then에 연결된 모든 .then 호출에 전달되는 값을 반환할 수 있습니다. (약속.then().then().then())
  • 기술적으로 코드는 여전히 동기식입니다(단일 프로세스). promise가 하는 일은 이벤트 루프가 각 루프의 promise 상태를 평가할 이벤트 루프로 계속되도록 허용하는 것입니다. 상태가 보류 중이면 루프는 다른 코드를 계속 실행합니다. 해결되면 .then 호출이 실행되고, 거부되면 .catch 호출이 실행됩니다.
  • 일반적으로 fetch 및 mongoose와 같은 후드 아래에는 http 연결이 설정되거나 스트림이 실행 중일 때 이벤트를 내보내는 이벤트 이미터가 있으며, 이러한 이벤트는 약속이 해결되도록 알릴 수 있습니다. javascript 이벤트에 대한 내 기사 읽기: https://tuts.alexmercedcoder.com/jsevents/
  • 좋은 웹페이지 즐겨찾기