0

好的,所以我有一个服务来检查是否已加载特定的 3rd 方 JS 插件。我想监听它何时进入 DOM,同时它处于未定义状态。我怎么做?到目前为止,我已经尝试使用一个主题并定期重试,但我无法让它工作:

$apiReady: Subject<boolean> = new Subject();

RegisterOnNewDocumentLoadedOnDocuViewareAPIReady(reControl: any): any {

            this.$apiReady.asObservable().subscribe((isReady: boolean) => {
                if (isReady) {
                       //Do something
                    return of(isReady);
                }
            })
            let IsreControlInitialized = ThirdPartyAPI.IsInitialized(reControl);
            if (IsreControlInitialized) {
                this.$apiReady.next(true);
            }
        return throwError(false);
    }

然后在组件中:

this._apiService.RegisterOnAPIReady(this.elementID).pipe(
                 retryWhen(error => {
                   return error.pipe(delay(2000));  //<---- Doesn't work
              })).subscribe((response: boolean) => {
                if (response) {
                    //Do some stuff
                 }
              });

我的意图是检查 API 元素是否已加载,如果没有在 2 秒内重试,但这不起作用,有人可以帮忙吗?

4

1 回答 1

0

在满足某些条件之前抛出和捕获错误对我来说有点违反直觉。

我的方法包括使用区间运算符和takeUntil运算符。

apiReady = new Subject();

interval(2000) // Check every 2s
 .pipe(
  map(() => this.isApiReady())
  takeUntil(this.apiReady)
 )
 .subscribe(isReady => {
  if (isReady) {
   this.apiReady.next();
   this.apiReady.complete();
  }
 })

于 2019-11-26T22:08:54.097 回答