TypeError .subscribe не является функцией - PullRequest
0 голосов
/ 25 сентября 2018

Я вызываю функцию в моем сервисе из моего компонента.Когда я пытаюсь подписаться на возвращаемые данные, я получаю следующую ошибку в моей консоли:

ОШИБКА TypeError: this.entityService.getEntityType (...). Подписаться не является функцией

Похоже, что возвращение в моем операторе switch недопустимо.Если я верну эту функцию обратно в компонент, она будет работать нормально.Что я делаю не так?

// компонент

export class ProfileComponent implements OnInit {

pageConfigs: any;
facility: Facility;
param1: any;
entityConfig: any = {};
snapshot: RouterStateSnapshot;

constructor(
    private modelService: ModelService,
    private entityService: EntityService,
    private pageConfigsService: PageConfigsService,
    private route: ActivatedRoute,
    private router: Router
) {}

ngOnInit() {
   this.snapshot = this.router.routerState.snapshot;
    console.log('snapshot', this.snapshot);

    console.log('ngOnInit snapshot url', this.snapshot.url);

    this.entityService.getEntityType(this.snapshot.url)
    .subscribe(
        response => {
            this.param1 = response
            console.log(this.param1);
        }
    );
    console.log('endpoint', this.entityConfig.endpoint);

    this.entityService.getEntities(this.entityConfig.endpoint)
    .subscribe(
        response => {
            this.facility = this.modelService.assignModelFromResponse(this.entityConfig.model, response[0]);
            console.log('facility', this.facility);
        }
    );

    this.pageConfigsService.getPageConfigs('provider_search', 'profile')
    .subscribe(
        response => {
            this.pageConfigs = response;
        }
    );
}
}

// сервис

export class EntityService {
entityConfig: any = {};

constructor(
    private firebase: AngularFireDatabase,
    private http: HttpClient
) { }

getEntities(entityType) {
    return this.http.get(`http://localhost:3000/${entityType}`);
    // return this.firebase.list('providers').valueChanges();
}

getEntityType(model) {
    switch (model) {
        case '/provider-search/profile/1?entity_type=provider':
        this.entityConfig = {
            name: 'providers',
            model: Provider,
            endpoint: 'providers'
        };
        break;
        case '/provider-search/profile/1?entity_type=facility':
        this.entityConfig = {
            name: 'facilities',
            model: Facility,
            endpoint: 'facilities'
        };
        break;
        case '/provider-search/profile/1?entity_type=pharmacy':
        this.entityConfig = {
            name: 'pharmacies',
            model: Pharmacy,
            endpoint: 'pharmacies'
        };
        break;
    }
}
}

1 Ответ

0 голосов
/ 25 сентября 2018

Ваша реализация getEntityType, вероятно, неверна и должна возвращать обычный объект словарного стиля вместо выполнения присваивания в методе get.Чтобы подписаться на это, вам нужно обернуть его в какой-нибудь наблюдаемый объект.

Вместо того, чтобы делать это, просто используйте его как синхронную функцию:

getEntityType(...) {
   return { ... }
}

this.entityConfig = this.entityService.getEntityType(this.snapshot.url);
console.log(this.entityConfig);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...