2016-04-25 2 views
2

Я пытаюсь установить значение, полученное из .get-функции, в переменную, объявленную снаружи, но неспособную сделать это.ionic 2 локальное хранилище не удалось установить полученное значение переменной

var dt; 
//retrieve 
this.local.get('didTutorial').then((value) => { 
    alert(value); 
    dt = value; 
}) 

console.log("Local Storage value: "+dt); 

Я смог получить «истинный» для предупреждения, но получение «не определено» для console.log, что печать вне функции.

enter image description here enter image description here

Один из способов является то, что я могу поместить все мои остальные коды в «.Затем функции», но это было бы очень грязно.

Update (Solution):

В соответствии с ионным API (http://ionicframework.com/docs/v2/api/platform/storage/LocalStorage/), они используют .get для получения значений.

С использованием обещаний это собственные ограничения, используя следующие:

constructor(navController) { 
    this.navController = navController; 
    this.local = new Storage(LocalStorage); 
} 

и функция GetItem,

localStorage.getItem('didTutorial') 

Вы сможете получить его без того, чтобы положить все в функции обратного вызова метод.

+0

Эй, это оценивается как: 'Ошибка TS2339: свойство 'getItem' не существует в типе 'Storage'.' –

+0

@ThomasModeneis Возможно, я не уверен, что это для .beta5 и ниже. – Gene

ответ

5

Чтение из вашей LocalStorage оболочки в этом случае является асинхронным, что означает, что обратный вызов передается this.local.get вызывается после вашего призыва к console.log. Попробуйте разместить console.logвнутри ваш callback; он должен работать тогда:

// retrieve 
this.local.get('didTutorial').then((value) => { 
    alert(value) 
    var dt = value 
    console.log("Local Storage value:", dt) 
}) 

Кроме того, вы заметите, что я изменил свои аргументы console.log вызовов. Это потому, что console.log принимает 1 или несколько параметров и форматирует их намного красивее, когда вы передаете их вместо их конкатенации. Просто про совет.

+0

Но скажем, я хочу делать другие вещи, кроме как использовать «console.log», как бы я это сделал? – Gene

+1

Я знаю, что обходной путь работает, но я хочу сделать больше, чем console.log, но делать это внутри обратного вызова очень грязно. – Gene

+0

Вот как работает JavaScript, и вокруг этого не так много. К счастью, вы, кажется, знаете интерфейс Promise (т. Е. '.then'), что значительно улучшает читаемость. Возможно, вы [эту статью MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) читаете? –

Смежные вопросы