promise.allSettled를 typescript와 함께 사용하는 방법은 무엇입니까?
Nov 20 2020
Promise.allSetttled
내가 ts config comilerOptions를 설정 했음에도 불구하고 Typescript 빌드가 좋지 않은 것 같아서 실패합니다."lib": [ "ES2020.Promise" ],
에 대한 응답처럼 보인다 promise.allSettled
포함되지 않습니다 result
나 reason
.
typescript 빌드를 실행할 때 다음 오류가 발생합니다.
Property 'reason' does not exist on type 'PromiseSettledResult<IMyPromiseResult>'.
과
Property 'value' does not exist on type 'PromiseRejectedResult'.
내 코드 블록은 다음과 같습니다 당신이 볼 수 있듯이, 나는 액세스하려 reason
하고 result
해결받을 약속의 eaech에서.
const myPromise = async () : Promise<IMyPromiseResult> {
return new Promise((resolve) => {
resolve("hello world")
})
}
const data = await Promise.allSettled([
myPromise()
]);
const response = data.find(res => res.status === 'fulfilled')?.result;
if(!response) {
const error = data.find(res => res.status === 'rejected')?.reason;
throw new Error(error);
}
올바른 인터페이스를 포함하도록 Promise.allSettled 선언을 어떻게 업데이트 할 수 있습니까?
답변
2 Jens Nov 20 2020 at 11:46
Bergi가 언급했듯이 TypeScript는 유형을 확인할 때 유형이 PromiseFulfilledResult
/ 인지 알지 못합니다 PromiseRejectedResult
.
유일한 방법은 약속 결과를 던지는 것입니다. 이는 해결 된 약속이 이행되었는지 또는 거부되었는지 이미 확인했기 때문에 수행 할 수 있습니다.
이 예를 참조하십시오.
const myPromise = async (): Promise<string> => {
return new Promise((resolve) => {
resolve("hello world");
});
};
const data = await Promise.allSettled([myPromise()]);
const response = (data.find(
(res) => res.status === "fulfilled"
) as PromiseFulfilledResult<string> | undefined)?.value;
if (!response) {
const error = (data.find(
(res) => res.status === "rejected"
) as PromiseRejectedResult | undefined)?.reason;
throw new Error(error);
}
2 bela53 Nov 20 2020 at 13:13
find
유형 조건자를 반환하는 유형 가드로 콜백을 정의합니다 .
type IMyPromiseResult = string
const response = data.find(
(res): res is PromiseFulfilledResult<string> => res.status === 'fulfilled'
)?.value;
if (!response) {
const error = data.find(
(res): res is PromiseRejectedResult => res.status === 'rejected'
)?.reason;
throw new Error(error);
}
데모 플레이 그라운드