RxJS 在发出之前发出过早赋值问题

问题描述 投票:0回答:1

我的问题如下。 this.version 获取案例的值?分配的。原因是,.map 在分配时尚未完成,因此 this.version 之后的检查会看到初始值。有没有什么方法可以更改脚本,以便在发出/映射完成后进行分配?在发出/映射发生之前,在 app.component.ts 中调用 getVersionValues 函数。

import { Injectable } from '@angular/core';
import { VersionValues } from '@app-core/models/standard-filter.model';
import {ApiHelperService} from "@app-core/services/api-helper.service";
import {UserService} from "@app-core/services/utils/user.service";
import {map, tap} from "rxjs";
@Injectable({providedIn: 'root'})
export class VersionInfoService {
  versions: Array<string> | undefined  = [];
  userInfo$ = this.apiHelperService.getUserInfo().pipe(map(e => {
    this.versions = e.versions;
    return e;
  }));
  constructor(
    private apiHelperService: ApiHelperService){
  }
  getVersionValues(
    frontendVersion = this.versions?.[0] ?? "1.1.3",
    backendVersion = this.versions?.[1] ?? "1.1.3",
    javaVersion = this.versions?.[2] ?? "1.1.29",
    pentahoVersion =  this.versions?.[3] ?? "1.1.3"
  ): VersionValues {
    return {
      frontendVersion,
      backendVersion,
      pentahoVersion,
      javaVersion
    };
  }
}
angular rxjs
1个回答
0
投票

getVersionValues()
应该返回一个 Observable:

getVersionValues(frontendVersion?: string, backendVersion?: string, javaVersion?: string, pentahoVersion?: string): Observable<VersionValues> {
  return this.userInfo$.pipe(
    tap((defaults) => {
      frontendVersion ??= defaults[0];
      backendVersion ??= defaults[1];
      pentahoVersion ??= defaults[2];
      javaVersion ??= defaults[3];
    }),
    map(() => ({
      frontendVersion,
      backendVersion,
      pentahoVersion,
      javaVersion
    }));
}
© www.soinside.com 2019 - 2024. All rights reserved.