Promise 상태가 resolve 또는 Reject로 표시되는 방법

3253 단어
Promise가 Resolve 또는 Reject를 표시하는 방법

루트 Promise 개체 내에서


루트 대상의 창설은 일반적으로 현식 new 하나의 Promise 대상을 통해 창설됩니다
new Promise( (resolve, reject) => {
  if (...) {
     resolve(value1)
  }
  else {
     reject(value2)
  }
})

방법 1: 상태 변천을 표시하기 위해 Resolve나reject를 호출합니다. 예를 들어
new Promise((resolve, reject) => { resolve("SUCC") })
.then((value)   => { console.log("THEN : " + value) })
.catch((reason) => { console.log("THROW: " + reason) })


new Promise((resolve, reject) => { reject("FAIL") })
.then((value)   => { console.log("THEN : " + value) })
.catch((reason) => { console.log("THROW: " + reason) })

실행 결과
$ node test.js
THEN : SUCC
THROW: FAIL

방법2: 이상 (throw) 명령을 던져서rejected 상태 변천을 표시합니다.return 문장으로resolved 상태 변천을 표시할 수 없습니다. 이return 값은 어디로 되돌아갈지 모릅니다.
예.
new Promise((resolve, reject) => { return "SUCC" })
.then((value)   => { console.log("THEN : " + value) })
.catch((reason) => { console.log("THROW: " + reason) })


new Promise((resolve, reject) => { throw "FAIL" })
.then((value)   => { console.log("THEN : " + value) })
.catch((reason) => { console.log("THROW: " + reason) })

실행 결과
$ node p.js
THROW: FAIL

return 문장에 표시된 Promise는 Resolved 상태도 rejected 상태도 아닌 상태 변천이 일어나지 않은 것을 볼 수 있다.

뿌리가 아닌 Promise 체인 안에 있어요.


방법1: 리셋 (return)을 통해resolved 상태와 버퍼 이상 (throw)을 표시하고rejected 상태를 표시합니다
new Promise((resolve, reject) => { resolve("SUCC") })
.then((value)   => { console.log("THEN-1 : " + value); return "SUCC1" })
.then((value)   => { console.log("THEN-2 : " + value); })
.then((value)   => { console.log("THEN-3 : " + value); })
.catch((reason) => { console.log("THROW: " + reason) })

실행
$ node p.js
THEN-1 : SUCC
THEN-2 : SUCC1
THEN-3 : undefined

return 문장 표시 상태가 Resolved입니다.리턴 (return) 문장이 없으면 직접 리턴하는 것과 같고, 리턴 값이 없습니다. 다음 Promise에는undefined 값을 매개 변수로 받을 것입니다.
rejected의 예
new Promise((resolve, reject) => { resolve("SUCC") })
.then((value)   => { console.log("THEN-1 : " + value); throw "FAIL" })
.then((value)   => { console.log("THEN-2 : " + value); return })
.then((value)   => { console.log("THEN-3 : " + value); })
.catch((reason) => { console.log("THROW: " + reason) })

실행 결과
$ node p.js
THEN-1 : SUCC
THROW: FAIL

throw 문에서 Promise 상태가 Rejected로 변경됩니다.
방법2: 새 Promise 대상을 만들고 새 Promise에서 리소스나 리소스를 현저하게 호출해서 상태를 표시합니다
new Promise((resolve, reject) => { resolve("SUCC") })
.then((value)   => { console.log("THEN-1 : " + value); return new Promise((resolve, reject) => { resolve("SUCC1") }) })
.then((value)   => { console.log("THEN-2 : " + value); })
.catch((reason) => { console.log("THROW: " + reason) })

실행 결과
$ node p.js
THEN-1 : SUCC
THEN-2 : SUCC1

좋은 웹페이지 즐겨찾기