【问题标题】:Trigger a StreamController at ngOnInit()在 ngOnInit() 触发 StreamController
【发布时间】:2019-03-29 07:26:09
【问题描述】:

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
  });
}

假设我想在ngOnInit()“触发”stream

经过一些测试,我发现这可以通过调用void search(String term) =&gt; _searchTerms.add(term); 来完成就在此之后

await Future.delayed(Duration(milliseconds: 1));

似乎ngOnInit() 内部的_searchTerms 调用不是等待。

谁能解释为什么会这样,或者我做错了什么?

【问题讨论】:

    标签: dart angular-dart dart-html


    【解决方案1】:

    目前尚不清楚您要在这里做什么,但一些背景可能会有所帮助。

    Angular 生命周期方法不能被中断。他们也不会等待异步操作。它们只是将在角度生命周期点调用的回调。要求 Angular 等你在某个未知点工作是不可能的。如果操作从未完成怎么办?子树的其余部分会发生什么?您将处于某种奇怪的状态,这会使大部分逻辑和应用程序无效。

    相反,我们使用更改检测/变量来更改组件的状态以处理这些异步操作。因此,您可以使用布尔变量显示进度指示器,直到 rpc 返回,然后通过翻转变量来显示结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2020-11-17
      • 2017-11-07
      • 2019-09-13
      • 2019-04-16
      • 2018-04-25
      相关资源
      最近更新 更多