gpt4 book ai didi

javascript - Promise.all 导致 Jest 显示 UnhandledPromiseRejectionWarning

转载 作者:行者123 更新时间:2023-11-30 14:08:58 28 4
gpt4 key购买 nike

我有一些调用 Promise.all 的代码。它在浏览器中运行正常,控制台中没有任何警告。

有 3 个函数 f1、f2 和 f3,它们都返回一个 promise。代码看起来像这样

Promise.all([
f1(),
f2(),
f3()
]).then((values) => {
resolve({success: true})
}).catch(err => {
reject(err)
})

当我使用 Jest 测试包含上述代码的文件时,我看到了这个错误。

(node:17177) UnhandledPromiseRejectionWarning:未处理的 promise 拒绝。这个错误要么是在没有 catch block 的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的 promise 。 (拒绝编号:18)

这是编写上述代码的错误方法还是 Jest 中的错误?

这是我使用的实际代码:

getDataFromDatabase() {
return new Promise((resolve, reject) => {
const assessmentUrl = `${this.assessmentUrl}`
http.get(assessmentUrl).then(response => {
if (response.data.record === null) {
Promise.all([
this._getPupilPlacement(),
this._getSurveyQuestions(),
this._getCompetencies()
]).then((values) => {
successState.pupilPlacement = values[0].pupilPlacement
successState.items = values[1].items
successState.formid = values[2].formid
successState.competencies = values[3].competencies
const panels = this.getPanels(values[3].competencies)
successState.panels = panels
successState.numPages = panels.length
successState.itemsAreOverridden = true
resolve(successState)
}).catch(err => {
reject(err)
})

}
else {
resolve(response.data.record)
}
})
})
}

最佳答案

避免 Promise constructor antipattern !您忘记处理来自 http.get(assessmentUrl) promise 的错误。

你应该写

getDataFromDatabase() {
const assessmentUrl = `${this.assessmentUrl}`
return http.get(assessmentUrl).then(response => {
//^^^^^^
if (response.data.record !== null)
return response.data.record;
return Promise.all([
// ^^^^^^
this._getPupilPlacement(),
this._getSurveyQuestions(),
this._getCompetencies()
]).then(values => {
const panels = this.getPanels(values[3].competencies)
return {
// ^^^^^^
pupilPlacement: values[0].pupilPlacement,
items: values[1].items,
formid: values[2].formid,
competencies: values[3].competencies,
panels: panels,
numPages: panels.length,
itemsAreOverridden: true,
};
});
});
}

关于javascript - Promise.all 导致 Jest 显示 UnhandledPromiseRejectionWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com