【问题标题】:Am getting UnhandledPromiseRejectionWarning in try catch block with async await在异步等待的 try catch 块中得到 UnhandledPromiseRejectionWarning
【发布时间】:2021-11-27 04:00:12
【问题描述】:

在实现 graphql 解析器函数时,我遇到了 UnhandledPromiseRejectionWarning 错误。我正在发送对某些文本进行分类的请求,而正是分类引发了错误。我想重新抛出任何抛出的错误,但错误没有被 catch 块捕获。

不是awaiting 请求,因为我同时发送了另外两个带有分类请求的请求,而是awaiting Promise.all 函数中的每个请求。

代码如下:

createPost: async (
        _,
        { fields: { media, text, location } }) => {
        try {
            const firstRequest = languageClient.classifyText({
                document: {
                    content: text,
                    type: 'PLAIN_TEXT'
                }
            });
        const secondRequest = // another request
        const thirdRequest = // another request
        const result = await Promise.all([firstRequest, secondRequest, thirdRequest]);
    } catch(error) { throw error }
    
}

如何正确处理错误?

【问题讨论】:

  • catch (error) { throw error } 表现得好像你根本没有被抓到一样。你想做catch (error) { console.error(error) }catch(error) { doSomethingElse(error) }
  • 嗨@DemiPixel,我尝试了你的建议,但仍然遇到同样的错误。我什至尝试将分类请求直接放入传递给Promise.all 的数组中,就像Promise.all[language.classifyText({ document: { content: text, type: 'PLAIN_TEXT' } }) 一样,但现在错误被吞没了,控制台中什么也没有显示。
  • 你在做什么?如果您尝试打印到控制台,您确定仍然有错误吗?
  • 正在将错误打印到控制台,但我确定有错误。错误是要分类的文本内容很短,但是当我先将请求分配给变量然后再传递给Promise.all时,我只会得到这个UnhandledPromiseRejectionWarning
  • @DemiPixel,当我从 catch 块中删除 throw 时,解析器在出现我不想要的错误后继续执行。我希望发送错误作为响应,这就是我包含 throw 时发生的情况。

标签: javascript node.js google-cloud-platform graphql es6-promise


【解决方案1】:

愚蠢的我,我用 if 语句包装了 Promise.all,所以它甚至根本没有运行。这就是为什么会得到奇怪的结果的原因。 3天后我才发现这一点。我太傻了。

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2019-05-02
    • 2017-02-06
    • 2016-01-26
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多