Обновить значение массива внутри обещания ionic 4 - PullRequest
1 голос
/ 11 марта 2019

Я хочу получить данные API и установить значение localStorage (после преобразования изображения с сервера в base64). Когда я получаю данные из API, я создаю простой цикл обновления URL-адреса изображения до формата base64, но this.users[key].picture["large"] = dataUrl; не работает. Из-за значения dataUrl не работают вне функции. Как я могу обновить объект строки? Что я могу сделать?

this.http.get<User[]>('https://randomuser.me/api?result=100').subscribe(data => {
  this.users = data['results'];

  for (let key in this.users) {
    let value = this.users[key].picture["large"];

    this.toDataURL('//cors-anywhere.herokuapp.com/' + value)
      .then((dataUrl) => {
        console.log(dataUrl);//correct returned value
        this.users[key].picture["large"] = dataUrl;
      });
        console.log(this.users[key].picture["large"]);//not equal to dataUrl
  }

  this.storage.set('users', "");//clear
  this.storage.set('users', this.users);
  console.log(this.users);
});

моя функция toDataUrl:

public toDataURL(url) {
return fetch(url)
  .then(response => response.blob())
  .then(blob => new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result);
    reader.onerror = reject;
    reader.readAsDataURL(blob);
  }));

}

1 Ответ

1 голос
/ 11 марта 2019

Вам необходимо вызвать хранилище и сохранить данные внутри асинхронного ответа:

this.http.get<User[]>('https://randomuser.me/api?result=100').subscribe(data => {
  this.users = data['results'];

  for (let key in this.users) {
    let value = this.users[key].picture["large"];

    this.toDataURL('//cors-anywhere.herokuapp.com/' + value)
      .then((dataUrl) => {
        console.log(dataUrl);//correct returned value
        this.users[key].picture["large"] = dataUrl;
        this.storage.set('users', this.users);
  console.log(this.users);
      });
  }
});

Также не делайте «set» «» для очистки памяти. Метод набора хранилищ переопределяет любое другое значение, которое у вас было, поэтому нет необходимости очищать его таким образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...