作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的 Node 进程在登录后退出
E callback: [Function: RP$callback],
E { serviceName: '....',
E errno: 'EAI_AGAIN',
E name: 'RequestError',
但我认为下面的代码会捕获异常并返回默认值
var rp = require('request-promise');
async function verifyJWT(jwt: string): Promise<any> {
const userDataPromise = rp({
uri: ...,
method: 'POST',
json: {
...
}
});
const userData = await userDataPromise.catch((err: any) => {
console.error(`verifyJWT: err`, err)
return {
authInfo: {}
};
});
return userData;
}
export default verifyJWT
是否有某些类型的故障不会在这里被捕获?在 catch on the promise 中提供拒绝处理程序会更好吗?
谢谢,布伦特
最佳答案
您将标准 promise 处理与 async/await
风格的 promise 处理混合在一起。您应该尝试使用其中之一,但不能同时使用两者。同时使用这两种方法不受限制,但肯定会增加困惑。
async/await
风格的 promise 处理应该是这样的:
async function verifyJWT(jwt: string): Promise<any> {
try {
return await rp({
uri: ...,
method: 'POST',
json: {
...
}
});
} catch (err) {
console.error(`verifyJWT: err`, err);
return {
authInfo: {}
};
}
}
标准的 promise 处理应该是这样的:
function verifyJWT(jwt: string): Promise<any> {
return rp({
uri: ...,
method: 'POST',
json: {
...
}
}).catch((err: any) => {
console.error(`verifyJWT: err`, err);
return {
authInfo: {}
};
});
}
关于node.js catch block 在等待时未按预期触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55496746/
我是一名优秀的程序员,十分优秀!