/ / chiamando un servizio angular2 errore 'Proprietà' allora 'non esiste sul tipo' Sottoscrizione '- angolare, dattiloscritto, ionico-quadro, ionico2

chiamando un servizio angular2 errore 'Proprietà' poi 'non esiste sul tipo' Abbonamento '- angolare, dattiloscritto, quadro ionico, ionico2

Sto provando a chiamare il servizio dal mio login.ts ma continuo a ricevere diversi errori. ecco il mio codice

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
);
}
}

Quindi fondamentalmente quello che voglio è quando facebookLogin() viene cliccato, va a auth.service.ts e ottiene il singup() metodo che restituisce il valore.

Ma continuo a ricevere un Property "then" does not exist on type "Subscription".

Cosa significa e come posso risolverlo?

risposte:

4 per risposta № 1

Cambia iscriviti a toPromise() (non dimenticare di importare 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 a .map() e quindi usare subscribe() invece di then() sul sito di chiamata.

 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) => {

});
});

}