我的节点进程在登录后退出
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
这里是否存在某些类型的故障? 提供兑现承诺的拒绝处理程序会更好吗?
谢谢, 布伦特
答案 0 :(得分:0)
您正在将标准的承诺处理与 class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
Item: 5,
skip: 0
}
this.handleClick = this.handleClick.bind(this);
}
urlParams() {
return `http://localhost:3001/meetups?filter[limit]=${(this.state.Item)}&&filter[skip]=${this.state.skip}`
}
handleClick() {
this.setState({skip: this.state.skip + 1})
}
render() {
return (
<div>
<a href={this.urlParams()}>Example link</a>
<pre>{this.urlParams()}</pre>
<button onClick={this.handleClick}>Change link</button>
</div>
)
}
}
ReactDOM.render(<Example/>, document.querySelector('div#my-example' ))
样式的承诺处理混合在一起。您应该尝试使用其中之一,但不能同时使用两者。同时使用两种方法不受限制,但肯定会增加混乱。
这是async/await
风格的承诺处理应如下所示:
async/await
这是标准承诺处理的外观:
async function verifyJWT(jwt: string): Promise<any> {
try {
return await rp({
uri: ...,
method: 'POST',
json: {
...
}
});
} catch (err) {
console.error(`verifyJWT: err`, err);
return {
authInfo: {}
};
}
}
答案 1 :(得分:-1)
您没有使用async await
,因为它应该使用
async await
使代码能够等待Promise响应,然后继续下一步。其余端点返回的任何错误均由catch块捕获。
我在下面发布了示例代码,以说明async await
与promise
一起工作
var rp = require('request-promise');
var myfun = async ()=>{
let returnValue = null;
try{
let response = await rp("http://localhost:3000/getdata");
console.log("ajax success");
returnValue = response;
}
catch(err){
console.log("ajax error ",err.message)
returnValue = err.message;
}
return returnValue;
}
注意,如果要从async
函数返回任何数据,则调用函数也应为async
,并且在调用时必须使用await
Read more关于async await