Promise 소계

1367 단어

Promise


Promise.prototype.catch()


Promise 상태가 Resolved가 된 경우 오류를 다시 내보내는 것은 유효하지 않습니다.
var promise = new Promise(function(resolve, reject) {
  resolve('ok');
  throw new Error('test');
});
promise
  .then(function(value) { console.log(value) })
  .catch(function(error) { console.log(error) });
// ok

위 코드에서 Promise는resolve 문장 뒤에 오류를 던졌습니다. 잡히지 않습니다. 던지지 않은 것과 같습니다.
Promise 대상의 오류는 포획될 때까지 뒤로 전달됩니다.즉, 오류는 항상 다음catch 문장에 잡힌다.
getJSON("/post/1.json").then(function(post) {
  return getJSON(post.commentURL);
}).then(function(comments) {
  // some code
}).catch(function(error) {
  //  Promise 
});

위의 코드에는 모두 세 개의 Promise 대상이 있습니다. 하나는 getJSON에서 발생하고 두 개는 then에서 생성됩니다.그것들 중 어떤 오류도 마지막catch에 포착됩니다.
전통적인try/catch 코드 블록과 달리,catch 방법으로 오류 처리된 리셋 함수를 지정하지 않으면,Promise 대상이 던진 오류는 외부 코드로 전달되지 않으며, 아무런 반응이 없습니다.
var someAsyncThing = function() {
  return new Promise(function(resolve, reject) {
    //  , x 
    resolve(x + 2);
  });
};

someAsyncThing().then(function() {
  console.log('everything is great');
});

위 코드에서 someAsyncThing 함수에서 발생하는 Promise 대상은 오류를 보고하지만, catch 방법을 지정하지 않았기 때문에 이 오류는 포착되지 않고 외부 코드로 전달되지 않아 실행 후 출력이 없습니다.크롬 브라우저가 이 규정을 준수하지 않으면 "ReferenceError: x is not defined"오류가 발생합니다.

좋은 웹페이지 즐겨찾기