Promise의 불완전한 시갱 기록

4198 단어

Promise


주로 Promise에 대한 이해가 잘 안 되는 질문들을 기억해 주세요.resolve 또는 reject의 코드 문제
list:
  • 이미 resolve이 된 후에 코드가
    new Promise((resolve, reject) => {
      resolve(233);
      console.log('ahhh');
    })
    .then(data => console.log(data));
    
    //ahhh
    //2333
    
    
    을 실행할 것인가
    답은 운행하는 것이다.
  • 이미 resolve이 된 후에 동기화 오류가
    new Promise((resolve, reject) => {
      resolve(233);
      JSON.parse('[22342343423');
    })
    .catch(err => console.log(err));
    
    // no result;
    
    을 던질까요
    결과적으로 아무런 오류도 나타나지 않는다
  • 이미 resolve이 된 후에 resolve 또는 reject을 진행하면 어떤 변화가 있는지
    new Promise((resolve, reject) => {
      resolve(233);
      resolve(474748484);
      reject('err');
    })
    .then(data => console.log(data))
    .catch(err => console.log(err));
    
    //233
    
    결과는 아무런 변화가 없을 거예요.
  • 이미 resolve이 된 후에 비동기 코드가 틀리면
    new Promise((resolve, reject) => {
      resolve(233);
      setTimeout(() => JSON.parse('[23313212'), 0);
    })
    .then(data => console.log(data))
    .catch(err => console.log(err));
    
    //233
    //Uncaught SyntaxError: Unexpected end of JSON input
    
    이번 비동기적인 투매는 투매될 것이다.그리고 Promise.then 이후
  • resolve 이전에 동기화 오류 코드
    new Promise((resolve, reject) => {
      JSON.parse('[23423432');
      console.log(32423423);
      resolve(233);
    })
    .then(data => cosole.log(data))
    .catch(err => console.log(err));
    
    //SyntaxError: Unexpected end of JSON input
    
    catch가 오류를 포착하고 다음 코드를 실행하지 않습니다
  • resolve 전에 비동기적으로 잘못된 코드가 있으면
    new Promise((resolve, reject) => {
      setTimeout(() => JSON.parse('[2312312'), 0);
      resolve(233);
    })
    .then(data => console.log(data))
    .catch(err => console.log(err));
    
    //233
    //Uncaught SyntaxError: Unexpected end of JSON input
    
    일단 Resolve를 하고 오류를 포착할 수 없어요.
  • 비동기식 resolve 이후 오류
    new Promise((resolve, reject) => {
      setTimeout(() => resolve(233), 0);
      JSON.parse('[324234');
    })
    .then(data => console.log(data))
    .catch(err => console.log(err));
    
    //SyntaxError: Unexpected end of JSON input
    
    오류를 포착하면 비동기적인 Resolve를 실행하지 않습니다
  • 비동기식
    new Promise((resolve, reject) => {
      setTimeout(() => resolve(233), 0);
      setTimeout(() => JSON.parse('[43535'), 0);
    })
    .then(data => console.log(data))
    .catch(err => console.log(err));
    
    //233
    //Uncaught SyntaxError: Unexpected end of JSON input
    
    결론은 먼저then을 하고 전체적인 미포착 오류를 던지는 거예요.
  • 모두 비동기적이지만 순서가 다를 때
    new Promise((resolve, reject) => {
      setTimeout(() => resolve(233), 1000);
      setTimeout(() => JSON.parse('[232432'), 0);
    })
    .then(data => console.log(data))
    .catch(err => console.log(err));
    
    //Uncaught SyntaxError: Unexpected end of JSON input
    //233
    
    여기는 둘 다 비동기적이기 때문에 서로 막히지 않기 때문에 Resolve에 영향을 주지 않습니다
  • 차단된 콘텐츠가 있을 경우
    new Promise((resolve, reject) => {
      let date = new Date().getTime();
    
      //   3s
      while((new Date()).getTime() - date < 3000)
    
      resolve(233);
    })
    .then(data => console.log(data));
    
    console.log('ahhh');
    
    //   3s
    //ahhh
    //233
    
    주 루틴을 막고 then은 다음 이벤트 순환에서 실행됩니다

  • 개인 결론: Promise안에 하나의 상자가 있고 그 다음에 상자의 운행은 동기화된다. 안에 먼저 resolve 또는 reject을 되돌려주면 이 상자는 뒤의 운행을 상관하지 않고 resolve 또는 reject의 값을 되돌려주고 상태를 padding에서 resolved 또는 rejected으로 바꾼다.비동기적인 측면에서 볼 때 모두 비동기적인 것이기 때문에 막히는 것이 존재하지 않는다. 그래서 비동기 안에서 resolve 또는 reject을 호출하면 되돌아오는 값을 얻을 수 있다. 그러나 비동기적인 다른 문제는 이 상자 관리에 속하지 않는다. 이것이 바로 다음 사건의 순환이다. 상자는 지난 사건에서 이미 집행되었다.물론 resolve이나 reject이 돌아오지 않았기 때문에 padding상태이며 다른 reject이나 resolve이 비동기적인 사건에서 돌아오기를 기다리고 있다.
    물론 현재 async await의 시대에 Promise 약low에 대해 이야기하고 있지만 Promise의 일부 용법을 이해하고 싶습니다. 부적절한 점이 있으면 지적해 주십시오. 감사합니다.

    좋은 웹페이지 즐겨찾기