离子2存储无法与变量一起使用



我不确定这里有什么问题,但我无法返回一个值。我现在不想立即使用sqlite。

 doLogin(event){
    this.storage.get('user').then((val) => {
      this.username=val;
      console.log(this.username);
      console.log(val);
  });
}

问题是第一个日志返回未定义,但第二个日志返回正确的值。

编辑:真的对不起大家。两个日志都可以正常工作。但是下面提到的日志不起作用。这导致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将呼叫承诺数组,等到所有返回。

我们可以使用RXJS可观察到的可观察到存储效果的承诺。

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

相关内容

  • 没有找到相关文章