Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Aurelia-在路由器预渲染步骤中等待承诺返回_Javascript_Promise_Es6 Promise_Aurelia - Fatal编程技术网

Javascript Aurelia-在路由器预渲染步骤中等待承诺返回

Javascript Aurelia-在路由器预渲染步骤中等待承诺返回,javascript,promise,es6-promise,aurelia,Javascript,Promise,Es6 Promise,Aurelia,TL;DR-我如何延迟aurelia router.js中的ProcessResult()函数的执行,因为我仍在等待代码中承诺的结果?它会导致正确的模块呈现,地址/href错误 示例:如果您使用的是基本模块,那么单击admin,将加载管理模块,但href仍然是www.mycompany.com/#/base module,而不是www.mycompany.com/#/admin,并且可以在控制台中看到此错误: 错误[app router]错误:预期路由器管道将返回导航结果,但得到[{}] 较长版

TL;DR-我如何延迟
aurelia router.js
中的
ProcessResult()
函数的执行,因为我仍在等待代码中承诺的结果?它会导致正确的模块呈现,地址/href错误

示例:如果您使用的是基本模块,那么单击admin,将加载管理模块,但
href
仍然是
www.mycompany.com/#/base module
,而不是
www.mycompany.com/#/admin
,并且可以在控制台中看到此错误:

错误[app router]错误:预期路由器管道将返回导航结果,但得到[{}]

较长版本:

我的路由器中有一个预渲染步骤,用于在渲染视图之前检查用户是否启用了特定模块

在我的PreRenderStep类中,我有一个run函数,它调用中介来获取用户的权限,然后检查用户单击的模块是否在其启用的模块列表中。对调解人的要求包括一个承诺

问题是prerender步骤中的run承诺在run方法中的承诺完成之前就解决了。因此,最终会呈现视图(因为用户已启用),但之前的href仍保留在地址栏中

路由器:

configureRouter(配置,路由器){
config.title=“Tramonex”;
config.addPipelineStep('authorize',AuthorizeStep);
config.addPreRenderStep(PreRenderStep);
config.map([
{
路由:['','注销'],
姓名:'家',
moduleId:'模块/身份验证/注销'
},
{
路由:“密码重置”,
moduleId:'模块/身份验证/密码重置',
},
{route:'app',moduleId:'app',auth:true},
{
路由:“基本模块”,
名称:'基本模块',
moduleId:'模块/基本模块',
href:'基本模块',
导航:是的,
作者:是的
},
{
路由:“test1”,
名称:“test1”,
moduleId:'modules/test1/test1',
href:'测试1',
导航:是的,
作者:是的,
设置:{moduleAuthRequired:true}
},
{
路由:“test2”,
名称:“test2”,
moduleId:'modules/test2/test2',
href:'test2',
导航:是的,
作者:是的,
设置:{moduleAuthRequired:true}
},
{
路由:'管理',
名称:'管理员',
moduleId:'modules/admin/admin',
href:'管理员',
导航:是的,
作者:是的,
设置:{moduleAuthRequired:true}
},
]);
this.router=路由器;
}

}
您需要返回在run函数中创建的承诺

return this.mediator.getPermissionsForUser()

如果您从预呈现步骤返回承诺,是否有效:返回此.mediator.getPermissionsForUser()。然后…?还有一个首先运行的授权步骤,它感觉是执行此检查的正确位置,表明您可能只是缺少一个
返回
,即
返回此.mediator.getPermissionsForUser()。然后(…)
是的,就是这样!谢谢,伙计们,真不敢相信我错过了-啊@mgiesa,如果你想发布一个答案,我很乐意接受它作为答案(优先选择)。很好!我会加上它作为答案