Promise.done(),Promise.finally()
ES6
의Promise API
는 제공하는 방법이 많지 않고 일부 유용한 방법은 스스로 배치할 수 있다.다음은 두 가지 부재ES6
에 배치하지만 유용한 방법을 소개한다.done()
Promise
대상의 리셋 체인은 then
방법이나 catch
방법으로 끝나든 마지막 방법이 오류를 던지면 포착되지 않을 수 있다Promise
내부의 오류가 전체 국면에 퍼지지 않기 때문이다).따라서 우리는 done
방법을 제공하여 항상 리셋 체인의 끝에 위치하고 발생할 수 있는 모든 오류를 제거할 수 있다. Promise.prototype.done = function (onFulfilled, onRejected) {
this
.then(onFulfilled, onRejected)
.catch(function (reason) {
//
setTimeout(() => {
throw reason
}, 0)
})
}
위 코드에서 볼 수 있듯이
done
방법의 사용은 then
방법처럼 사용할 수 있고 fulfilled
와 rejected
상태의 리셋 함수를 제공할 수 있으며 어떠한 매개 변수도 제공하지 않을 수 있다.그러나 어쨌든 done
는 발생할 수 있는 모든 오류를 포착하고 전체 국면에 던질 것이다.finally()
finally
방법은 Promise
대상의 마지막 상태가 어떻든지 간에 실행할 동작을 지정하는 데 사용된다.이것은 done
방법과 가장 큰 차이점이다. 일반적인 리셋 함수를 매개 변수로 받아들이고, 이 함수는 어쨌든 실행해야 한다.다음은 서버가
Promise
로 요청을 처리한 다음finally
방법으로 서버를 끄는 예입니다. Promise.prototype.finally = function (callback) {
let P = this.constructor
return this.then(
value => P.resolve(callback()).then(() => value),
reason => P.resolve(callback()).then(() => {
throw reason
})
)
}
위 코드에서 앞의
Promise
가 fulfilled
든 rejected
든 모두 리셋 함수callback
를 실행한다.이것은
ES5
로 전환한 후의 것이다. Promise.prototype.finally = function (callback) {
var P = this.constructor
return this.then(function (value) {
return P.resolve(callback()).then(function () {
return value
})
}, function (reason) {
return P.resolve(callback()).then(function () {
throw reason
})
})
}
이렇게 쓰는 이유는
finally
가 이 promise
체인의 마지막 고리가 아니라 상대적으로 done
야말로.finally
이후에 then
와catch
등이 있을 수 있기 때문에 promise
대상을 되돌려야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.