Taking this example from the doc:
Stream<List<Hero>> heroes;
// ···
void ngOnInit() async {
heroes = _searchTerms.stream
.transform(debounce(Duration(milliseconds: 300)))
.distinct()
.transform(switchMap((term) => term.isEmpty
? Stream<List<Hero>>.fromIterable([<Hero>[]])
: _heroSearchService.search(term).asStream()))
.handleError((e) {
print(e); // for demo purposes only
});
}
说我想在stream
上触发ngOnInit()
。
经过一些测试,我发现可以通过致电void search(String term) => _searchTerms.add(term);
紧随其后来完成此操作:
await Future.delayed(Duration(milliseconds: 1));
似乎_searchTerms
内部的ngOnInit()
呼叫没有等待。
任何人都可以解释为什么这样做会如此,或者我做错了吗?
答案 0 :(得分:0)
目前尚不清楚您要在这里做什么,但是一些背景可能会有所帮助。
角生命周期方法不能被中断。他们也不会等待异步操作。它们只是在角度生命周期的点将被调用的回调。不可能要求angular在某个未知点等待您完成工作。如果操作从未完成怎么办?其余子树会怎样?您将处于某种奇怪的状态,这会使许多逻辑和应用程序失效。
相反,我们使用更改检测/变量来更改组件的状态以处理这些异步操作。因此,您可以使用布尔变量显示进度指示器,直到rpc返回,然后通过翻转变量显示结果。