存储get()永远不会返回离子2中的值

时间:2017-03-24 01:33:19

标签: javascript ionic-framework ionic2

学习离子2,特别是使用Storage

所以,我刚创建了一个空白的应用程序:

ionic start storagetest blank --v2

遵循此the docs

cordova plugin add cordova-sqlite-storage --save
npm install --save @ionic/storage

然后,我的app.module.ts看起来像这样:

import { NgModule, ErrorHandler } from '@angular/core';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';

import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

import { IonicStorageModule } from '@ionic/storage';

@NgModule({
  declarations: [
    MyApp,
    HomePage
  ],
  imports: [
    IonicModule.forRoot(MyApp),
    IonicStorageModule.forRoot()
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler}
  ]
})
export class AppModule {}

然后继续home.ts

import { Component } from '@angular/core';

import { NavController } from 'ionic-angular';

import { Storage } from '@ionic/storage';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(public navCtrl: NavController, storage: Storage) {

     storage.ready().then(() => {
       storage.set('name', 'Max');
       storage.get('name').then((val) => {
         console.log('Your name is', val);
       })
     });

  }

}

javascript日志中没有任何内容。似乎get()永远不会返回该值。但是,ready()确实有效,因为我已在其中添加了console.log()

那有什么不对?

我在Chrome,Mac OS上运行该应用程序。

1 个答案:

答案 0 :(得分:2)

all是异步的,并且在调用storage.set时可能不会设置promise.So值。尝试:

get().then()

storage.ready().then(() => { storage.set('name', 'Max').then(()=> storage.get('name').then((val) => { console.log('Your name is', val); }); ); }); then方法中没有错误处理程序,这可能是为什么没有记录任何内容的原因。