我的问题如下。 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
};
}
}
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
}));
}