在运行observer.complete()之前,如何考虑observer.next(something)已获得值?

时间:2019-09-12 12:04:06

标签: angular typescript rxjs

我正在使用Angular创建一个应用程序。在组件上,我具有用于预加载数据的解析器。这是解析器的代码:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): void {
return Observable.create(observer => {
  const searchProductsRequest = this.journeyDataService.searchProductsRequest;
    this.basketService.reset();
    this.progressService.subscribe(
    this.productsPublicApiService.getRecommendedProductCategoriesUsingGET(searchProductsRequest.vrn,
        searchProductsRequest.postcode),
      (response) => {
        // we save work type list
        observer.next(response.categories);
      },
      // this.handleServerErrors.bind(this)
      (err) => console.error(err)
    );
    observer.complete();
  });
}

然后在我正在执行的组件中

ngOnInit() {
   this.productCategoryList = this.route.snapshot.data.productCategoryList;
   console.log('resolve', this.productCategoryList);
 }

这里的resolve为null。因此,问题在于服务器发出的响应会在稍后运行,然后我运行完毕,因此没有要显示的数据。

1 个答案:

答案 0 :(得分:1)

您可以像这样完全调用“下一个”处理程序:

(response) => {
        // we save work type list
        observer.next(response.categories);
        observer.complete();
      },

不过,最有可能采用一种更常用的方式来处理您的任务,但要实现它,必须了解“ getRecommendedProductCategoriesUsingGETprogressService.subscribe是什么