У меня была следующая функция:
Исходная функция
public FindCertType(CertTypeID: string) : Observable<ICertType> {
console.log("... FindCertType in Model-tools.service called ...");
return this.GetCertTypes()
.pipe(
map((CertTypeMap: IResponseObject<ICertType>) => {
return CertTypeMap.Array
}),
filter((CertType: ICertType ) => CertType.Id === CertTypeID)[0]
)
}
Этот код привел к следующей ошибке:
Ошибка консоли
... ShowCertType called ... new-bcaba.component.ts:27
... GetCertType in Certification Component called ... certification.component.ts:49
... FindCertType in Model-tools.service called ... model-tools.service.ts:53
... GetCertTypes in Model-tools.service called ... model-tools.service.ts:48
ERROR TypeError: fn is not a function NewBcabaComponent.html:3
at pipe.js:18
at Array.reduce (<anonymous>)
at piped (pipe.js:18)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.pipe (Observable.js:91)
at ModelToolsService.push../src/app/_services/model-tools.service.ts.ModelToolsService.FindCertType (model-tools.service.ts:55)
at NewBcabaComponent.push../src/app/certification/certification.component.ts.CertificationComponent.GetCertType (certification.component.ts:50)
at NewBcabaComponent.get [as BaseCertType$] (certification.component.ts:54)
at NewBcabaComponent.push../src/app/certification/application/new-bcaba/new-bcaba.component.ts.NewBcabaComponent.ShowCertType (new-bcaba.component.ts:28)
at NewBcabaComponent.get [as ParentCertType$] (new-bcaba.component.ts:37)
at Object.eval [as updateDirectives] (NewBcabaComponent.html:3)
Когда я изменил функцию, чтобы фильтр был встроен в карту, ошибка исчезла, и она заработала, как я и ожидал.
Модифицированная функция
public FindCertType(CertTypeID: string) : Observable<ICertType> {
console.log("... FindCertType in Model-tools.service called ...");
return this.GetCertTypes()
.pipe(
map((CertTypeMap: IResponseObject<ICertType>) => {
return CertTypeMap.Array.filter(CertType => CertType.Id === CertTypeID)[0];
})
)
}
Хотя моя проблема была решена с помощью модификации, я не понимаю, почему это работает, но первая версия не работает. Я импортировал операторы «filter» и «map» из «rxjs / operator» для исходного кода, и, как я понимаю, операторы внутри pipe должны работать с возвращаемыми значениями, наблюдаемыми от предыдущего оператора, поэтому фильтр должен работать при возврате map. Кто-нибудь может объяснить, почему это не работает?