【问题标题】:How to correctly await a promise in TypeScript如何正确等待 TypeScript 中的承诺
【发布时间】: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 语句和函数,从而导致大量缩进。

【问题讨论】:

标签: typescript promise async-await type-safety


【解决方案1】:

我会推荐

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???
    }
}

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2013-09-16
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2020-05-15
    • 2018-03-19
    相关资源
    最近更新 更多