![](/img/trans.png)
[英]Node.js: Unhandled promise rejection - UnhandledPromiseRejectionWarning
[英]Unhandled promise rejection in Node.js
我正在尝试进行DELETE
调用,我正在实现下面的函数。 我理解在承诺中,需要有一个“解决”和“拒绝”状态,但是我得到了一个未处理的承诺拒绝错误:
UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):[object Object]
我真的不喜欢在promise中使用条件语句,因为它变得混乱,但我在这里要做的是检查组织是否已经过验证,如果是,则不应该发生删除操作并拒绝。
function deleteOrg(id) {
return new Promise((resolve, reject) => {
// A helper function that returns an 'org' object
findById(id)
.then((orgObject) => {
if (orgObject.verified_at !== null) {
throw new Error(422, 'Unable to delete organization')
}
//Organization is not verified, so proceed to delete
new Organization().where({'id': id}).destroy()
.then(() => {
return resolve() //return 200 upon deletion
})
.catch((err) => {
return reject(new Error(500, 'Unable to delete organization'))
})
})
.catch((err) => {
const m = `Unable to delete organization: ${err.message}`
return reject(new Error(500, m))
})
})
}
我很确定我正在处理if
错误的拒绝。
在promise构造函数中创建promise是一种已知的反模式 。 尝试将您的承诺模块化为单独的函数:
function deleteOrg(id) {
const verifyOrg = (orgObject) => {
if (orgObject.verified_at !== null) {
throw new Error(422, 'Unable to delete organization')
}
};
const destroyOrg = () => new Organization().where({
'id': id
}).destroy();
return findById(id)
.then(verifyOrg)
.then(destroyOrg);
}
在哪里可以让错误通过promise链传播并在外部处理它们:
deleteOrg(id)
.catch((err) => {
const m = `Unable to delete organization: ${err.message}`;
// ...
});
当findById和.destroy返回Promises时,不需要Promsie构造函数
然后将您的代码简化为
function deleteOrg(id) {
return findById(id)
.then((orgObject) => {
if (orgObject.verified_at !== null) {
throw new Error(422, 'Unable to delete organization')
}
//Organization is not verified, so proceed to delete
return new Organization().where({'id': id}).destroy()
.catch((err) => {
throw (new Error(500, `Unable to delete organization: ${err.message}`));
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.