如何传递在函数中创建的对象?
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
})
}
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
})
}