![](/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.