Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.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
Javascript 为什么订阅isn';t调用_Javascript_Angular_Rxjs - Fatal编程技术网

Javascript 为什么订阅isn';t调用

Javascript 为什么订阅isn';t调用,javascript,angular,rxjs,Javascript,Angular,Rxjs,我有以下问题:我是否因为没有调用“done”而做错了什么 @Injectable({ providedIn: 'root' }) export class GetPersonsService { url:string="https://swapi.co/api/people/" persons:Person[]; headers: HttpHeaders = new HttpHeaders() .set('Accept', 'application/json');

我有以下问题:我是否因为没有调用“done”而做错了什么

@Injectable({
  providedIn: 'root'
})

export class GetPersonsService {
  url:string="https://swapi.co/api/people/"
  persons:Person[];
  headers: HttpHeaders = new HttpHeaders()
    .set('Accept', 'application/json');
  constructor(private http: HttpClient) { }
  getPerson(personsId){
    return this.http.get<Person[]>(`${this.url}${personsId}/`,{headers:this.headers});
  }
  getAllPersons(){
    let numberOfPersons=88; 
    const response = [...Array(numberOfPersons).keys()].map(i => this.getPerson(i+1));
    return forkJoin(response).pipe(map(value=> value),share());
  }
}

这里发生了什么事?为什么我没有在控制台中完成?您没有创建正确的数组。。。对索引量使用数组构造函数,用伪数据(null)填充它,并用map在其上循环。RxJS映射操作符是无用的

getAllPersons(){
  const numberOfPersons = 10; 
  const response = Array(numberOfPersons).fill(null).map((_, i) => this.getPerson(i+1));
  return forkJoin(response).pipe(share());
}

更新

用户17似乎不存在。在这种情况下,请在下面找到更新代码:

getAllPersons(){
  const numberOfPersons = 88; 
  const response = Array(numberOfPersons)
    .fill(null).map((_, i) => this.getPerson(i+1)
      .pipe(catchError(() => of(null))
    )
  );
  return forkJoin(response).pipe(share());
}

您没有创建正确的数组。。。对索引量使用数组构造函数,用伪数据(null)填充它,并用map在其上循环。RxJS映射操作符是无用的

getAllPersons(){
  const numberOfPersons = 10; 
  const response = Array(numberOfPersons).fill(null).map((_, i) => this.getPerson(i+1));
  return forkJoin(response).pipe(share());
}

更新

用户17似乎不存在。在这种情况下,请在下面找到更新代码:

getAllPersons(){
  const numberOfPersons = 88; 
  const response = Array(numberOfPersons)
    .fill(null).map((_, i) => this.getPerson(i+1)
      .pipe(catchError(() => of(null))
    )
  );
  return forkJoin(response).pipe(share());
}

你能做些什么?您所拥有的看起来不错。您的控制台中是否有任何错误?加载资源失败:服务器响应状态为404()core.js:6014 swapi.co/api/people/17/:1问题是我在第17个元素中中断了数据。我需要处理此错误,但即使我添加了err handler,它也会输出此错误。您可以更新您的问题,说明您试图如何处理此错误吗?您所拥有的看起来不错。您的控制台中是否有任何错误?加载资源失败:服务器响应状态为404()core.js:6014 swapi.co/api/people/17/:1问题是我在第17个元素中中断了数据。我需要处理此错误,但即使我添加了err handler,它也会输出此错误。您可以更新您的问题,说明您试图如何处理此错误吗?可以,因为您只有16个用户。如果您试图以
id=17
或更高的身份查找用户,它将返回404-notfound,这很奇怪。如果可以,请再检查一次:Chekout by your:and ngOnInit(){this.getPersons.getPerson(19).subscribe(value=>{//this.persons.push(value);console.log(value);}}输出{name:“Jek Tono Porkins”,身高:“180”,体重:“110”,头发颜色:“棕色”,皮肤颜色:“fair”,…}@graluc请不要在评论中发布代码。它不会格式化,通常不可读。相反,请将代码编辑到原始帖子中,并添加一条说明更新的注释。是的,因为您只有16个用户。如果您试图以
id=17
或更高的身份查找用户,它将返回404-notfound,这很奇怪。如果可以,请再检查一次:Chekout by your:and ngOnInit(){this.getPersons.getPerson(19).subscribe(value=>{//this.persons.push(value);console.log(value);}}输出{name:“Jek Tono Porkins”,身高:“180”,体重:“110”,头发颜色:“棕色”,皮肤颜色:“fair”,…}@graluc请不要在评论中发布代码。它不会格式化,通常不可读。相反,将代码编辑到原始帖子中,并添加一条说明更新的注释。