Проблема хранения Ionic 3 в браузере не работает - PullRequest
0 голосов
/ 27 февраля 2019

Хорошо, я собираюсь вырвать мои волосы (что от этого осталось).Всякий раз, когда я запускаю приложение с нуля после очистки всех файлов cookie / элементов хранения, я проверяю определенные элементы ... таким образом, проверяя, вошел ли пользователь в приложение или нет.

После того, как он вошел в систему через firebase(что успешно), он возвращается обратно в приложение, где мы затем устанавливаем UID и получаем токен Google для наших вызовов API.Все значения подтверждены и успешно извлекаются.

Мы устанавливаем их через поставщика услуг хранения.Как только они установлены, мы пытаемся вызвать что-то из нашего API, для этого нужен токен Google.Когда мы пытаемся извлечь это из хранилища, его там нет.Однако, если я просто обновлю свой браузер (не удаляя файлы cookie и т. Д.) На вкладке отладка / приложение, волшебным образом будут присутствовать значения localdb, и теперь все работает.

Вот провайдер хранилища:

@Injectable()
export class StorageProvider {
constructor(public http: HttpClient, public storage: Storage) {
console.log('Hello StorageProvider Provider');
}
public set(settingName,value):Promise<any>{

return this.storage.ready().then(() => {
  this.storage.set(`setting:${ settingName }`,value).then(() => {
    Promise.resolve(true);
  })
  .catch(err => {
    Promise.reject(err);
  })
})
.catch(err => {
  console.log("ERROR Storage Not Ready: " + err);

})
} public async get(settingName){
return this.storage.ready().then(() => { 
  this.storage.get(`setting:${ settingName }`).then((res) => {
      Promise.resolve(res);
  })
  .catch(err => {
    Promise.reject(err);
  })
})
.catch( err => {
  console.log("Storage Get Error");
  return Promise.reject(err);
}
);
}

Может кто-нибудь увидеть, что я делаю не так?Вот краткий фрагмент того, как мы его называем, который всегда возвращает No Token Set перед CMD + R. Как только я сделаю CMD + R, все будет в порядке, и все будет работать безупречно.

await this.storage.get('Token').then((results) => {
  this.token = results;
})

if(this.token == null)
{
  return Promise.reject("No Token Set");
}

1 Ответ

0 голосов
/ 01 марта 2019

Попробуйте:

this.token = await this.storage.get(‘Token’);

Вместо того, чтобы использовать await в асинхронном методе.

Также хорошо читать: https://www.joshmorony.com/using-asyncawait-syntax-for-promises-in-ionic/

...