【发布时间】:2020-08-16 00:36:29
【问题描述】:
我有一些代码,我在其中 continue 一个循环,如果一个承诺拒绝或使用它的结果与 要求它是 reolved 类型的东西,如以下示例代码所示:
for (const i in bar) {
let error = false;
const foo = await somePromise(i)
.catch(() => { error = true; });
if (error) continue;
// Something that requires foo to be resolved here
}
我的问题是 typescript 没有意识到 foo 最后被正确解析(由于没有正确解析,它仍然认为它可能是 void,因此给出了 2339 错误)。让 typescript 意识到这没问题的正确、类型安全的方法是什么?
我发现修复它的方法是声明 foo 的类型为 any,这并不理想,我的 linter 不喜欢这样,或者使用 .then,这也很糟糕,因为我d 必须开始在我的代码中嵌套多个 .then 语句和函数,从而导致大量缩进。
【问题讨论】:
-
在使用 await 时使用 try 和 catch。不要混合回调样式和等待
标签: typescript promise async-await type-safety