2017-03-07 4 views
1

ローカル変数にIonic2 Storage.getの値を割り当てる方法を知っている人はいますか? .then内のconsole.logがうまくいけば、それはその関数/メソッド内にしか存在しないようです。私は、見る私のデータが、ノー本当に私の他のコードに適用Ionic2 Storage Promise.allスコープ

-thanks

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

export class MyApp { 

favDessertMax: string; 
favDessertRuby: string; 

constructor(storage: Storage) { } 

storage.ready().then(() => { 

    this.storage.set('Max', 'Apple sauce'); 
    this.storage.set('Ruby', 'Banana split'); 


    Promise.all([ 
     this.storage.get('Max'), 
     this.storage.get('Ruby'), 
    ]) 
    .then(([val1,val2]) => { 
     this.favDessertMax = val1; 
     this.favDessertRuby = val1; 
     console.log(val1 + " " + val2); //values work here 
    }) 
    console.log(val1 + " " + val2); // values don't work out here (or anywhere else) 
    }); 

    storyTime() { // Need value to work here 
    let myStory = 'Max likes ' + this.favDessertMax + ' and Ruby Likes 'this.favDessertRuby'; 
    return myStory; 
    } 

} 

答えて

1

Promise.all「を取得」する方法を示し ほとんどの例は、ローカル変数にデータを設定しています。非同期ですのでのデータが得られない場合は、storyTime()と呼んでください。 データを確実に受け取れるように約束を守らなければなりません。

getData(){ 

    return Promise.all([ 
      this.storage.get('Max'), 
      this.storage.get('Ruby'), 
     ]) 
     .then(([val1,val2]) => { 
      this.favDessertMax = val1; // from 'Max' 
      this.favDessertRuby = val2; // from 'Ruby' 
      return [val1,val2];//return value in then. 
      console.log(val1 + " " + val2); //values work here 
     }) 
     }); 
    } 

storyTime() { // Need value to work here 
    return this.getData().then([val1,val2]=>{ 
    let myStory = 'Max likes ' + val1 + ' and Ruby Likes '+ val2 + '; 
    return myStory; 
    }); 
    }