如何传递在函数中创建的对象?

How to pass on object created in function?

  login() {
this.dbService.createRemoteDB();
this.dbService.createLocalDB();
let user;
this.userService
  .getUserFromRemoteDb()
  .then((userDoc: any) => {
    // Need to pass user to the next component
    user = userDoc;

    return this.syncService.getSyncDoc(user._id);
  })
  .then((syncDoc: any) => {
    return this.syncService.downloadData(user, syncDoc);
  });

}

我的问题是如何将“用户”传递给不同的组件?所以我不必再次从数据库中获取用户。

您可能需要使用 RxJS 创建一个快速缓存服务 Subject。请注意,可以找到更好的替代方案。如前所述,这将是最快的方法。

我将 ReplaySubject 与缓冲区 1 一起使用,因为它可以“保存”当前值并立即发送给未来的订阅者。

cache.service.ts

import { Injectable } from '@angular/core';
import { Observable, ReplaySubject } from 'rxjs';

@Injectable({ providedIn: 'root' })
export class CacheService {
  private user: ReplaySubject<any> = new ReplaySubject<any>(1);  // <-- buffer 1
  public user$: Observable<any> = this.user.asObservable();
  
  cacheUser(user: any) {
    this.user.next(user);
  }
}

登录组件

constructor(private cache: CacheService) { }

login() {
  this.dbService.createRemoteDB();
  this.dbService.createLocalDB();

  this.userService.getUserFromRemoteDb()
    .then((userDoc: any) => {
      this.cache.cacheUser(userDoc);
      return this.syncService.getSyncDoc(user._id);
    })
    .then((syncDoc: any) => {
      return this.syncService.downloadData(user, syncDoc);
    });
}

其他成分

user: any;

constructor(private cache: CacheService) { }

ngOnInit() {
  this.cache.user$.subscribe(user => {
    // use `user` from login
  })
}