我正在尝试设置一个管道步骤“角色管理”,在该步骤中我需要请求网络服务。现在我的问题是,http请求是异步的,因此重定向从未正确触发。
run(routingContext, next){
if (routingContext.getAllInstructions().some(i => i.config.permission)) {
let permission = routingContext.getAllInstructions()[0].config.permission;
this.roleService.userIsAllowedTo(permission)
.then(boolResponse => {
if(boolResponse){
return next();
}else{
return next.cancel(new Redirect("/"));
}
});
}
return next();
}
有人可以告诉我如何解决吗?
答案 0 :(得分:1)
只需从run()返回Promise
return this.roleService.userIsAllowedTo(permission).then(boolResponse => {
if(boolResponse){
return next();
}else{
return next.cancel(new Redirect("/"));
}
});
答案 1 :(得分:1)
非常感谢。我现在可以通过将方法更改为异步方法来解决该问题:
async run(routingContext, next){
if (routingContext.getAllInstructions().some(i => i.config.permission)) {
let permission = routingContext.getAllInstructions()[0].config.permission;
let isallowed = await this.roleService.userIsAllowedTo(permission);
if(isallowed){
return next();
}else{
return next.cancel();
}
}
return next();
}