(节点:55028)UnhandledPromiserEjectionWarning:TypeError:无法读取位于/users/PatrickStanciu/WebStormProjects/AUTISMAssistant/Backend/API/Controllers/PaymentsController.js:1045:34
位于processTicksAndRejections(internal/Process/Task_Queues.js:94:5)(节点:55028)的UnhandledPromiserEjectionWarning:未处理的承诺拒绝。
此错误源于抛入没有catch块的异步函数内部,或拒绝未用.(拒绝ID:1)
(节点:55028)[DEP0018]拒绝警告:拒绝未经处理的承诺。将来,未处理的承诺拒绝将以非零退出代码终止node.js进程。
当我尝试使用一个用户登录时,在我的Node.js后端出现了这个错误。为什么会出现?下面是一行:
if (!profilePromise.rows.length) {
resolve({
success: true,
cardDetails: null,
planId: null
})
return;
}
我对上面的“长度”有问题
根据名称,profilepromise
是一个承诺。承诺没有rows
属性,因此profilepromise.rows
是undefined
并且您不能从undefined
中读取任何属性。
您需要使用Promission并使用它的实现值,我猜它是带有lengty
属性的东西:
profilePromise
.then(rows => {
if (rows.length) {
resolve(/*...*/);
}
})
.catch(error => {
// ...handle/report the error...
// Probably `reject` here?
});
更多关于在这里使用承诺。
附带说明:假设profilepromise
确实是一个promission是正确的,那么这就意味着这个代码正在成为显式promission创建反模式的牺牲品。与其创建自己的承诺然后调用resolve
或reject
,不如链接到现有的承诺:
return profilePromise
.then(rows => {
if (rows.length) {
return {
success: true,
cardDetails: null,
planId: null
};
}
// Either return something else here, or `throw` if `rows` not having
// a truthy `length` is an error
});