Я не уверен, в чем проблема, но я не могу вернуть значение. Сейчас я не хочу использовать sqlite.
doLogin(event){
this.storage.get('user').then((val) => {
this.username=val;
console.log(this.username);
console.log(val);
});
}
Проблема состоит в том, что первый журнал возвращает undefined, но второй журнал возвращает правильные значения.
Редактировать: Очень жаль парней. Оба журнала работают нормально. Но журнал, упомянутый ниже, не работает. Это приводит к тому, что оператор if возвращает false, даже если все значения соответствуют полному коду для файла
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { FormBuilder, Validators } from '@angular/forms';
import { Storage } from '@ionic/storage';
@Component({
selector: 'login',
templateUrl: 'login.html'
})
export class LoginPage {
username: string;
password: string;
public loginForm = this.fb.group({
password: ["", Validators.required],
user: ["", Validators.required],
});
constructor(public navCtrl: NavController, public fb:FormBuilder, public storage:Storage) {
}
doLogin(event){
this.storage.get('user').then((val) => {
this.username=val;
console.log( this.username);
console.log(val);
});
this.storage.get('password').then((val) => {
this.password=val;
});
console.log(this.username); //NOT WORKING
if( this.username == this.loginForm.get('user').value && this.password == this.loginForm.get('password').value)
{
console.log("Login Successful");
}
}
Обещания являются асинхронными.. то, что консольный оператор журнала, вероятно, вызывается до того, как db вернет val
. Вы можете сделать эту операцию в then
Если вы используете обещания, вы можете использовать Promise.all
let userCredentials = [this.storage.get('user'),this.storage.get('password')];
Promise.all(userCredentials).then(values =>{
this.username = values[0];
this.password = values[1];
if( this.username == this.loginForm.get('user').value && this.password == this.loginForm.get('password').value)
{
console.log("Login Successful");
}
});
Promise.all вызовет множество обещаний и дождитесь возвращения.
Мы можем использовать Observable из RxJs для проверки 2 обещаний от завершения хранения.
Observable.forkJoin([
Observable.fromPromise(this.storage.get('user')),
Observable.fromPromise(this.storage.get('password'))
])
.subscribe(data=> {
this.username = data[0];
this.password = data[1];
if (this.username == this.loginForm.get('user').value && this.password ==this.loginForm.get('password').value){
console.log("Login Successful");
}
});
Promise.all([...]).then((results) => {...})
?