/ / llamar a un servicio angular2 error 'Propiedad' entonces 'no existe en el tipo' Suscripción '- angular, mecanografiado, marco iónico, iónico2

llamando a un servicio angular2 error 'Propiedad' entonces 'no existe en el tipo' Suscripción '- angular, mecanografiado, ionic-framework, ionic2

Estoy tratando de llamar al servicio desde mi login.ts pero sigo recibiendo diferentes errores. aqui esta mi codigo

login.ts

import { Component } from "@angular/core";
import { Auth, User } from "@ionic/cloud-angular";
import { NavController } from "ionic-angular";
import { Storage } from "@ionic/storage";
import { TabsPage } from "../tabs/tabs";
import { AuthService } from "../../services/auth/auth.service";
import {Observable} from "rxjs/Rx";


@Component({
templateUrl: "login.html"
})

export class LoginPage {
authType: string = "login";
error: string;
storage: Storage = new Storage();

constructor(public auth: Auth, public user: User, public navCtrl: NavController, public authService: AuthService) {}

facebookLogin() {
this.auth.login("facebook").then((success) => {
this.authService.signup(this.user.social.facebook).then((success) => {

});
});

}
}

auth.service.ts

import { Storage } from "@ionic/storage";
import { AuthHttp, JwtHelper, tokenNotExpired } from "angular2-jwt";
import { Injectable, NgZone } from "@angular/core";
import { Observable } from "rxjs/Rx";
import { Http, Headers } from "angular2/http";

@Injectable()
export class AuthService {

jwtHelper: JwtHelper = new JwtHelper();
// contentHeader = new Headers({"Content-Type": "application/json"});
storage: Storage = new Storage();
refreshSubscription: any;
user: Object;
zoneImpl: NgZone;
idToken: string;
error: string;

constructor(private authHttp: AuthHttp, zone: NgZone) {
this.zoneImpl = zone;
// Check if there is a profile saved in local storage
this.storage.get("profile").then(profile => {
this.user = JSON.parse(profile);
}).catch(error => {
console.log(error);
});

this.storage.get("id_token").then(token => {
this.idToken = token;
});
}

public authenticated() {
return tokenNotExpired("id_token", this.idToken);
}

public signup(params) {
var url = "http://127:0.0.1:3000/api/v1/register";
return this.authHttp.post(url, JSON.stringify(params))
.map(res => res.json())
.subscribe(
data => {this.storage.set("id_token", data.token)},
err => this.error = err
);
}
}

Básicamente, lo que quiero es cuando el facebookLogin() se hace clic, va a auth.service.ts y obtiene el singup() Método que devuelve el valor.

Pero sigo recibiendo un Property "then" does not exist on type "Subscription".

¿Qué significa esto y cómo lo resuelvo?

Respuestas

4 para la respuesta № 1

Cambiar suscribirse a toPromise() (no te olvides de importar toPromise)

  public signup(params) {
var url = "http://127:0.0.1:3000/api/v1/register";
return this.authHttp.post(url, JSON.stringify(params))
.map(res => res.json())
.toPromise(
data => {this.storage.set("id_token", data.token)},
);
}

o para .map() y luego usa subscribe() en lugar de then() en el sitio de la llamada.

 public signup(params) {
var url = "http://127:0.0.1:3000/api/v1/register";
return this.authHttp.post(url, JSON.stringify(params))
.map(res => {
let data = res.json();
this.storage.set("id_token", data.token);
return data;
});
}
  facebookLogin() {
this.auth.login("facebook").then((success) => {
this.authService.signup(this.user.social.facebook).subscribe((success) => {

});
});

}