Возврат из функции не работает (ионный) - PullRequest
2 голосов
/ 09 июля 2019

я пытаюсь получить ответ от этого http.get

getChatId(emailTo): any {
    var email = emailTo

    const httpOptions = {
      headers: new HttpHeaders({
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Token': this.token_value
      })
    };

    this.httpClient.get("https://xxxx=" + email, httpOptions)
      .subscribe(data => {
        console.log(data['_body']);
        return data
      }, error => {
        console.log(error);
        return error
      });
  }

это внутри моего конструктора

this.getChatId(this.emailTo).then((date) => {

      var docRef = firebase.firestore().collection("xxx").doc(date.response);

      docRef.onSnapshot((doc) => {
        this.document = doc.data()

        let chats_message = [];
        for (let k in this.document.messages) {
          chats_message.push(this.document.messages[k]);
        }
        chats_message.sort(function (a, b) { return a.id - b.id; })
        this.messages_chat = chats_message;
        this.content.scrollToBottom(300);//300ms animation speed

        console.log("Array", this.messages_chat);
      })
    });

но это дает мне эту ошибку:

vendor.js: 1823 ОШИБКА Ошибка: Uncaught (в обещании): TypeError: Невозможно чтение свойства 'подписка' неопределенного TypeError: Невозможно прочитать свойство 'подписаться' на неопределенное

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Вы должны переписать свою функцию в качестве наблюдаемой для взаимодействия с httpclient.Желательно в сервисном файле, таком как ChatService.Вы можете создать запрос http с моделями или любыми типами, которые вы получаете или отправляете.

export class ChatService {

  constructor(private http: HttpClient) {}

  getChatId(emailTo: string): Observable<any> {
    return this.httpClient.get<any>("https://xxxx=/" + email);
  }

}

Вызовите запрос http на странице с сервисом, внедренным в конструктор.

constructor(private chatService: ChatService) {}

getChatId() {
  this.chatService.getChatId(this.emailTo).subscribe(
    result => {
      // do something with result
    },
    error => {
      // do something with error
    }
  );
}

РЕДАКТИРОВАТЬ

Если вы работаете с моделями для передачи и получения данных в запросе http, вы можете определить их как тип.https://blog.angular -university.io / angular-http /

import { User } from '../models/user';

export class ChatService {

  constructor(private http: HttpClient) {}

  getChatId(emailTo: string): Observable<User> {
    return this.httpClient.get<User>("https://xxxx=/" + email);
  }

}
0 голосов
/ 09 июля 2019

Подписаться не является функцией в httpclient при запросе.Пожалуйста, следуйте приведенному ниже коду

import { Component } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';
 
@IonicPage()
@Component({
  selector: 'page-sample',
  templateUrl: 'sample.html',
})
export class SamplePage {
  sampleDatas: Observable<any>;
 
  constructor(public navCtrl: NavController, public httpClient: HttpClient) { 
    this.films = this.httpClient.get('https://swapi.co/api/films');
    this.sampleDatas
    .subscribe(data => {
      console.log('my data: ', data);
    })
  }
...