![](/img/trans.png)
[英]How to Handle Unhandled promise rejection in async object method in Node.js expressjs?
[英]How to handle async callback promise rejection?
嘗試處理我的異步代碼(nodeJS、ExpressJS)中的每個異常:這里幾乎是偽代碼。 我使用帶有方法 removeTokens (num, callback(err,remainingRequest)) 的限制器(npm 限制器)模塊。 大部分代碼在回調內部,我想捕獲任何錯誤並將其拋出給處理程序,但現在回調內部的錯誤仍然標記為“未處理的異常”,我不明白為什么。
app.post('/', async (req, res) => {
try {
...
return getAll();
async function getAll () {
limiter.removeTokens(1, async (err, remainingRequest) => {
try {
throw new Error('THROWN')
} catch (error) {
throw error
}
})
}
} catch (error) {
console.log(error);
}
});
你不應該將async
函數傳遞給不期望它們的東西(除非你捕捉到所有錯誤,就像你的app.post
回調一樣)。 相反,給自己一個返回承諾的limiter.removeTokens
包裝器:
function removeTokens(limiter, id) {
return new Promise((resolve, reject) => {
limiter.removeTokens(id, (err, remainingRequest) => {
if (err) {
reject(err);
} else {
resolve(remainingRequest);
}
});
});
}
(您也可以util.promisify
查看util.promisify
。)
然后:
app.post('/', async (req, res) => {
try {
...
await getAll(); // *** Or you might just use `removeTokens(limiter, 1)` directly here
function getAll() {
return removeTokens(limiter, 1);
}
} catch (error) {
console.log(error);
}
});
這里直接使用removeTokens
:
app.post('/', async (req, res) => {
try {
...
await removeTokens(limiter, 1);
} catch (error) {
console.log(error);
}
});
首先,如果可能的話,請盡可能多地分享代碼,這樣我們就可以輕松地調試問題所在。 向您提出您的問題,我認為問題在於在您的try..catch
塊中,您正在拋出錯誤而不是使用reject
處理它。 下面我粘貼了一個代碼塊,您可以嘗試讓我知道它是否適合您。 請注意語法可能會有所不同,但我們的想法是您必須在出現錯誤時reject
Promise。
`````````limiter.removeTokens(1, async (err, remainingRequest) => {
````````````try {
```````````````throw new Error('THROWN')
````````````} catch (error) {
```````````````return Promise.reject(error) //
````````````}
`````````})
``````}
```} catch (error) {
``````console.log(error);
```}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.