我正在尝试从Angular 2应用程序中的服务器加载配置文件,并且您可以想象它包含整个应用程序所需的初始化参数,因此必须先加载它。
问题是JS在设计上是异步的,所以没有办法使应用程序“等待”首选项文件。我已经创建了一个使用异步AJAX请求发送请求的服务,但我还不知道在缓存仍未加载时如何处理其他部分要求此服务“这是此首选项的值”。我无法拒绝请求,我无法阻止它们,使它们异步不起作用。
应该有一种方法可以在“加载”屏幕中停止应用程序,我相信这是正确的方法。当应用程序处于此模式时,将加载首选项,然后显示UI。
问题:在装载阶段结束之前,如何推迟加载主要部件?加载一个检查一系列必需品并初始化服务(连接,设置,身份验证等)的组件会很好,然后在满足它们之后加载主UI。
答案 0 :(得分:1)
在Angular2 Dart中,我使用Future
使其工作;然后无论什么要求该属性只需要await
该值。
请参阅:https://www.dartlang.org/tutorials/language/futures
Future gatherNewsReports() async {
// more slow code here
String path =
'https://www.dartlang.org/f/dailyNewsDigest.txt';
return (await HttpRequest.getString(path));
}
Future printDailyNewsDigest() async {
String news = await gatherNewsReports();
print(news);
}
如果您不使用Dart,我相信您可以使用JavaScript中的Promises
执行相同操作。
请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
async function printDailyNewsDigest() {
var news = await gatherNewsReports();
console.log(news);
}
完成未来/承诺后,触发URL更改,然后加载所需的页面。
JavaScript和Dart是SingleThreaded,如果你在任何时候阻止,任何东西都不会继续工作。