2017-12-05 4 views
0

Ich versuche das Token, das ich im Speichermodul von Ionic gespeichert habe, auf eine öffentliche Variable zu setzen, damit ich es später in der Datei aufrufen kann, wenn ich es versuche und es setze rufen Sie dann die Variable aus einer anderen Funktion ich einen undefinierten FehlerIonic Storage bekomme ich kein öffentliches var

Code

import {HttpClient, HttpHeaders} from '@angular/common/http'; 
import {Component, Injectable} from '@angular/core'; 
import { Storage } from "@ionic/storage"; 
import 'rxjs/add/operator/map'; 

@Injectable() 
@Component({ 
providers: [HttpClient] 
}) 
export class DataProvider { 
public token:string; 

constructor(public http: HttpClient, public storage: Storage) { 
} 

authToken(){ 
    console.log('token function') 
    this.storage.get('token').then((val) => { 
    this.token = val; 
    console.log(this.token); 
    }); 
} 

getsomething(){ 
    let headers = new HttpHeaders(); 
    headers = headers.set('Content-Type', 'application/json'); 
    this.authToken(); 
    console.log(this.token); 
} 

} 
+0

Zeigen Sie uns den Code zurückkehren müssen, wo Sie Ihre Token sind einstellen, auch tut Ihr 'console.log (diese. Token) 'protokolliert das Token? –

+0

Nein das ist es, was den undefinierten Fehler gibt, aber wenn ich 'console.log (this.token)' innerhalb der authToken Funktion aufrufen kann, funktioniert es. –

Antwort

1

Sie müssen authToken() zurückkehren ein Versprechen bekommen, da es asynchron ist Ihr getSomething()authToken() ausgeführt wird und nicht warten, bis es zu beenden führe folgendes console.log(this.token) aus, deshalb kommt es so undefiniert. Es gibt ein paar Möglichkeiten, können Sie uns das ausrechnen:

1 - einfach Ihre Token erhalten innerhalb Ihrer getsomething()

getsomething(){ 
    let headers = new HttpHeaders(); 
    headers = headers.set('Content-Type', 'application/json'); 
    this.storage.get('token').then((val) => { 
    this.token = val; 
    console.log(this.token); 
    // THE REMAINING CODE YOU NEED TO EXECUTE 
    }); 
} 

2 - authToken() gibt ein Versprechen

authToken =(): Promise<any> => { 
    console.log('token function') 
    return new Promise<any>(res => { 
    this.storage.get('token').then((val) => { 
     this.token = val; 
     console.log(this.token); 
     res(val); 
    }); 
    }); 
} 

getsomething(){ 
    let headers = new HttpHeaders(); 
    headers = headers.set('Content-Type', 'application/json'); 
    this.authToken().then(res => { 
    console.log(this.token); 
    }); 
} 

3 - Holen Sie sich Ihre Token in Ihr Konstruktor (falls Sie es bereits vorher gespeichert haben)

constructor(public storage: Storage){ 
    this.storage.get('token').then((val) => { 
    this.token = val; 
     console.log(this.token); 
    }); 
} 

Hoffe das hilft.

0

Es wird, weil das Token aus dem Speicher mit einem Versprechen gelesen wird, so dass, wenn in authToken das Versprechen hat beschlossen, gelesen, aber in getsomething Sie versuchen, das Token anmelden, bevor es in dem Versprechen eingestellt wurde.

Um sicherzustellen, dass Sie das Token in getsomething haben Sie die Versprechen von authToken

authToken(){ 
    console.log('token function') 
    return this.storage.get('token').then((val) => { 
    this.token = val; 
    console.log(this.token); 
    }); 
} 

getsomething(){ 
    let headers = new HttpHeaders(); 
    headers = headers.set('Content-Type', 'application/json'); 
    this.authToken().then(() => { 
    console.log(this.token); 
    }) 
} 
Verwandte Themen