gpt4 book ai didi

javascript - 如何将 promise.allSettled 与 typescript 一起使用?

转载 作者:行者123 更新时间:2023-12-04 00:14:26 37 4
gpt4 key购买 nike

Typescript 构建失败,因为它似乎不喜欢 Promise.allSetttled即使我已将 ts config comilerOptions 设置为 "lib": [ "ES2020.Promise" ],似乎对 promise.allSettled 的响应不包括 resultreason .
运行 typescript build 时出现以下错误:

Property 'reason' does not exist on type 'PromiseSettledResult<IMyPromiseResult>'.
Property 'value' does not exist on type 'PromiseRejectedResult'.
我的代码块看起来像这样,如您所见,我正在尝试访问 reasonresult来自每一个得到解决的 promise 。
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 声明以包含正确的接口(interface)?

最佳答案

就像 Bergi 提到的 TypeScript 不知道类型是否为 PromiseFulfilledResult/PromiseRejectedResult检查类型时。
唯一的方法是强制转换 promise 结果。之所以可以这样做,是因为您已经验证了已解决的 promise 是否已履行或被拒绝。
看这个例子:

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);
}

关于javascript - 如何将 promise.allSettled 与 typescript 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64928212/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com