问题描述
我有一些代码,如果一个Promise拒绝或将其结果与 required 的结果一起使用,则我会continue
进行循环,如以下示例代码所示:
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
}
我的问题是打字稿没有意识到foo
到底是正确解析的(它仍然认为由于解析不正确而可能是void
,因此给出了2339
错误)。使打字稿意识到这一点的正确,类型安全的正确方法是什么?
我发现解决该问题的方法是声明foo
类型为any
,这不是理想的选择,而我的孩子也不喜欢,或者使用.then
,这也很麻烦,因为我必须开始在代码中嵌套多个.then
语句和函数,从而导致大量缩进。
解决方法
我会推荐
for (const i in bar) {
try {
const foo = await somePromise(i)
// Something that requires foo to be resolved here
// break???
} catch {
continue
}
}
或实际上是then
,它并不难看,也不需要更多的缩进(甚至嵌套):
for (const i in bar) {
const error = await somePromise(i).then(foo => {
// Something that requires foo to be resolved here
return false;
},err => {
return true;
});
if (!error) {
// break???
}
}