【发布时间】: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