Angular 7 RXjs 6.x - 如何使用forkJoin(`of`和`Observable.create`之间的区别)

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

我的console.log永远不会调用(我的2个请求被调用并且没问题)。

const obs1 = this.awsService.getUsers();
const obs2 = this.apiService.get('admin/user');

return forkJoin(obs1, obs2).subscribe((res) => {
  console.log('res2', res);
});

我尝试单位调用(console.log A和B没问题):

const obs1 = this.awsService.getUsers();
obs1.subscribe((res) => {
  console.log('A' + res);
});

const obs2 = this.apiService.get('admin/user');
obs2.subscribe((res) => {
  console.log('B' + res);
});

编辑

我的代码返回一个可观察的User [],但KO是一个forkJoin:

getUsers(): Observable<User[]> {
  return Observable.create(obs => {
    const u = new User;
    u.username = user.Username;
    _users.push(u);
    return obs.next(_users);
  });
}

这段代码没问题:

const u1: User = new User;
u1.username = 'foo';
const u2: User = new User;
u2.username = 'foo';
const o2: Observable<User[]> = of([u1, u2]);
const fj = forkJoin(o2);
fj.subscribe(res => {
  console.log('r');
 });
 // r is ok in console

ofObservable.create( ... return obs.next(_users);)有什么区别?

angular rxjs6
1个回答
1
投票

create和of之间的区别是在发出一个项目之后完成定义。除非您指定,否则create不会完成。

如果你这样做:

getUsers(): Observable<User[]> {
  return Observable.create(obs => {
    const u = new User;
    u.username = user.Username;
    _users.push(u);
    obs.next(_users);
    obs.complete();
    return () => {}; // return value should be clean up function on completion if needed
  });
}

然后它会起作用,因为你在发射后立即完成。 forkJoin期望所有流都完成,并且在所有流都有之前不会发出,并且它将仅使用流中的最新值发出。

如果您确实想要所有排放,请考虑使用combineLatest

© www.soinside.com 2019 - 2024. All rights reserved.