我正在尝试调用DELETE
并实现下面的函数。我知道在promise中,需要有一个“resolve”和一个“reject”状态,但是我得到了一个未处理的promise rejection错误:
UnhandledPromiseRejection警告:未处理的promise拒绝(拒绝id:1):[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
中的拒绝是错误的。
4条答案
按热度按时间oyjwcjzk1#
由于findById和.destroy返回Promises,因此不需要Promsie构造函数
然后,您的代码将被简化为
r9f1avp52#
在promise构造函数中创建promise是一个known anti-pattern。尝试将promise模块化为单独的函数:
在这里,你可以让错误通过promise链传播,并在外部处理它们:
laximzn53#
;
最好的处理方法是使用
expect
,它可以与异常匹配。被检体检查xzlaal3s4#
我实际上遇到了同样的问题,因为我没有将
return
关键字添加到调用方法(deletetetype(id))中。添加return
后,UnhandledPromiseRejectionWarning消失。