хранилище ionic 2 не работает с переменными

1

Я не уверен, в чем проблема, но я не могу вернуть значение. Сейчас я не хочу использовать 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");
          }


  }
Теги:
angular
ionic-framework
ionic2

2 ответа

1

Обещания являются асинхронными.. то, что консольный оператор журнала, вероятно, вызывается до того, как 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 вызовет множество обещаний и дождитесь возвращения.

0

Мы можем использовать 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");
    }
});
  • 1
    Зачем использовать наблюдаемые вместо просто Promise.all([...]).then((results) => {...}) ?
  • 1
    @sebaferreras уверен, что мы можем сделать это с Promise, просто попробуйте познакомиться с Observable, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню