gpt4 book ai didi

javascript - 如何处理异步回调 promise 拒绝?

转载 作者:行者123 更新时间:2023-11-30 19:20:10 24 4
gpt4 key购买 nike

尝试处理我的异步代码(nodeJS、ExpressJS)中的每个异常:这里几乎是伪代码。我将限制器 (npm 限制器) 模块与方法 removeTokens (num, callback(err,remainingRequest)) 一起使用。大部分代码都在回调内,我想捕获那里的任何错误并将其抛给处理程序,但现在回调内的错误仍标记为“未处理的异常”,我不明白为什么。

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 回调一样)。相反,给自己一个返回 promise 的 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。)

然后:

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);
}
});

关于javascript - 如何处理异步回调 promise 拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com