我有以下代码:

//Loop: For each user ID/Role ID, get the data
userMeta.forEach((businessRole) => {
  Observable.forkJoin(
    af.database.object('/roles/'+businessRole.$value),
    af.database.object('/users/'+businessRole.$key)
  ).subscribe(
    data => {
      console.log("Data received");
      data[1].role = data[0];
      this.users.push(data[1]);
    },
    err => console.error(err)
  );

我正在尝试使用forkJoin订阅2个observables的结果。

由于某些原因,未显示“收到数据”消息。

我的userMeta变量在console.log上看起来不错:

angular - Observable.forkJoin()不执行-LMLPHP

怎么了?

更新:以下代码也不返回任何内容
let source = Observable.forkJoin(
        af.database.object('/roles/'+businessRole.$value),
        af.database.object('/users/'+businessRole.$key)
    );
    let subscription = source.subscribe(
      function (x) {
    console.log("GOT: " + x);
  },
  function (err) {
    console.log('Error: %s', err);
  },
  function () {
    console.log('Completed');
  });

我实际上想做的是提高以下代码的性能:
//Subscription 3: role ID to role Name
        af.database.object('/roles/'+businessRole.$value)
        .subscribe((roleData) => {
        //Subscription 4: Get user info
        af.database.object('/users/'+businessRole.$key).subscribe(user => {

最佳答案

forkJoin() 要求所有源Observable至少发出一次并完成。

以下演示按预期完成:

const source = forkJoin(
  from([1,2,3]),
  from([9,8,7,6])
).subscribe(
  x => console.log('GOT:', x),
  err => console.log('Error:', err),
  () => console.log('Completed')
);

现场演示:https://stackblitz.com/edit/rxjs-urhkni
GOT: 3,6
Completed

2019年1月:已针对RxJS 6更新

关于angular - Observable.forkJoin()不执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40303012/

10-11 11:37