Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何使用角4中可观测的算子forkJoin_Angular_Typescript_Rxjs_Observable - Fatal编程技术网

Angular 如何使用角4中可观测的算子forkJoin

Angular 如何使用角4中可观测的算子forkJoin,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我需要做以下工作: 获取同一集合的用户管理员和专业人员在本例中为street“users”,我正在使用最新版本的AngularFire,这项工作可以观察到 我怎样才能同时提出两个请求,而答案是管理员和专业用户的联合体 我试着像这样使用forkJoin操作符: getUsers(): Observable<any> { return forkJoin([ this.afs.collection('users', ref => ref.where('roles.adm

我需要做以下工作:

获取同一集合的用户管理员和专业人员在本例中为street“users”,我正在使用最新版本的AngularFire,这项工作可以观察到

我怎样才能同时提出两个请求,而答案是管理员和专业用户的联合体

我试着像这样使用forkJoin操作符:

 getUsers(): Observable<any> {
  return forkJoin([
    this.afs.collection('users', ref => ref.where('roles.admin', '==', true)).valueChanges(),
    this.afs.collection('users', ref => ref.where('roles.professional', '==', true)).valueChanges()
  ])
  .map((data: any) => {
    console.log(data)
    return data;
  });
以下是我的作品:

import {Observable} from 'rxjs/Rx';
import { forkJoin } from 'rxjs/observable/forkJoin';
import 'rxjs/add/operator/map';
还有别的办法吗。 我非常感谢您的帮助

尝试以下方法:

let url1 = this.http.get('https://url1');
let url2 = this.http.get('http://url2');

forkJoin([url1, url2]).subscribe(results => {
  // results[0] is url1 response
  // results[1] is url2 response
  this.url1reponse = results[1];
  this.url2reponse = results[0];
});

我认为问题在于
.valueChanges()
返回a,它永远不会
完成。从以下方面:

等待观测值完成,然后合并它们最后的值 发射

因此,您要寻找的可能是:

getUsers():可观察{
返回可观测的(
此.afs.collection('users',ref=>ref.where('roles.admin','=',true)).valueChanges(),
this.afs.collection('users',ref=>ref.where('roles.professional','=',true)).valueChanges()
)
.map((数据:任意)=>{
console.log(数据)
返回数据;
});
}

无论何时更新两个集合中的任何一个,都应该记录一个由两个项目组成的数组,代表这两个集合。

您可以共享一个plunker吗?
let url1 = this.http.get('https://url1');
let url2 = this.http.get('http://url2');

forkJoin([url1, url2]).subscribe(results => {
  // results[0] is url1 response
  // results[1] is url2 response
  this.url1reponse = results[1];
  this.url2reponse = results[0];
});
getUsers(): Observable<any> {
  return Observable.combineLatest(
    this.afs.collection('users', ref => ref.where('roles.admin', '==', true)).valueChanges(),
    this.afs.collection('users', ref => ref.where('roles.professional', '==', true)).valueChanges()
  )
  .map((data: any) => {
    console.log(data)
    return data;
  });
}