Angular 7 RXjs 6.x - Как использовать forkJoin (разница между `of` и` Observable.create`) - PullRequest
0 голосов
/ 15 февраля 2019

Мой console.log никогда не вызывается (у меня 2 запроса и OK).

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);
});

РЕДАКТИРОВАТЬ

Мой код возвращает наблюдаемый пользователь [], но KO un a 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

Какая разница между of и Observable.create( ... return obs.next(_users);)?

1 Ответ

0 голосов
/ 15 февраля 2019

разница между create и of заключается в том, что по определению завершается после испускания одного элемента.Создание не завершается, если вы не укажете его.

, если вы сделали:

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 ожидает завершения всех потоков и не будет излучать до тех пор, пока не получат все потоки, и он будет излучать только с самым последним значением в потоках.

Если вы действительно хотите все выбросы, рассмотрите подходящие вместо * 1008

...