Как использовать localForage синхронно - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть мобильное приложение Cordova, которое хранит автономные данные в localStorage.Недавно пользователи начали получать сообщение об ошибке QUOTA_EXCEEDED_ERR, так как localStorage имеет ограничение 5 МБ.Я решил использовать фреймворк «localForage», но заметил, что он работает асинхронно.Поскольку я не хочу переписывать все мое сложное приложение, упакованное в функции обратного вызова, я хотел знать, есть ли какой-нибудь способ использовать «localForage» синхронно (дождаться, пока функция getItem вернет значение).

Вот кодпример того, что я пытаюсь сделать:

localforage.setItem('testKey', 'testValue', function() {
  var value = getValue('testKey');

  console.log(value); // here I get undefined, but I want to get a value
});

function getValue(key) { // I want this function to return value
  var result;
    localforage.getItem(key, function(value) {
    result = value;
  });

  return result;
}

Я хочу, чтобы getValue () возвращала значение без изменения какого-либо другого кода

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Согласно этой ссылке

localForage имеет двойной API, который позволяет вам использовать обратные вызовы в стиле Node или Promises.Если вы не уверены, какой из них вам подходит, рекомендуется использовать Обещания.

Так что вы можете использовать любое из них, если хотите.при использовании обещаний вы можете использовать async/await для ожидания результата

localforage.setItem('testKey', 'testValue', async function() {
  var value = await getValue('testKey')

  console.log(value); // here I get undefined, but I want to get a value
});

 async function getValue(key) { 
  var result = await localforage.getItem(key);
  return result;
}

jsfiddle

0 голосов
/ 07 февраля 2019

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

function getValue(key) { 
  var result = localforage.getItem(key, function(err, value) {
    return value;
  });
  return result;
}
...