MergeMap на список идентификаторов не в состоянии построить - PullRequest
0 голосов
/ 10 ноября 2018

Что не так с синтаксисом здесь mergeMap(names => names),?

getIds(): void { 
this.myservice
.getIds.pipe( mergeMap(id => this.getNames(id)), 
mergeMap(names => names), toArray() ) 
} 

myservce.ts имеет следующее:

getIds():Observable<Ids>{
const url = 'http://localhost:4000';
return this.http
    .post(url, '')
    .map(({ Ids }: any) => Ids.map(item => ({Id: item.Id, 
    Name: item.Name }))) as Observable<Ids>;
}

getNames(data: Ids):Observable<any[]> {
  const url ='http://localhost:5000';
  return this.http
    .post(url,data)
    .pipe(map(({ Results }: any) => Results[0].results.map(item => ({Id: item.ID, Name: item.Name }))));
    }

Ошибка компилятора (как новичку я не могу понять):

ERROR in src/app/cvetable/mcomponent.ts(132,19): error TS2345:
Argument of type '(names: {}) => {}' is not assignable to parameter 
of type '(value: {}, index: number) => ObservableInput<any[]>'. 
Type '{}' is not assignable to type 'ObservableInput<any[]>'. 
Type '{}' is not assignable to type 'Iterable<any[]>'. 
Property '[Symbol.iterator]' is missing in type '{}'.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Вы должны использовать switchMap вместо mergeMap

getIds(): void { 
   this.myservice
   .getIds.pipe(switchMap(id => this.getNames(id))) 
} 
0 голосов
/ 10 ноября 2018

Что-то серьезно не так с методом getIds в вашей Службе:

Вот как это должно быть. Так как вы используете HttpClient, а ваш eg находится в Angular 7, который использует Rxjs 6+, вам придется связать .pipe вызов с вашим наблюдаемым значением, чтобы применить к нему операторы. Внутри вызова .pipe вы можете поместить список операторов, разделенных запятыми:

getIds(obj):Observable<Ids>{
  return this.http
    .post(this.url, obj)
    .pipe(
      map((Ids: any) => Ids.map(item => ({Id: item.Id, Name: item.Name }) ) )
    )
}

Вот Обновлен StackBlitz с исправленными ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...