могу ли я получить значение из базы данных dexie без использования встроенных обещаний

Я пишу автономную веб-страницу, которую нужно перезапустить с того места, где она остановилась. У меня есть страница (страницы) для чтения больших массивов JSON, она строит различные таблицы, читает из таблиц, и теперь мне нужно «продолжить с того места, где остановился пользователь»

В javascript я обычно получаю значение var todaysDataObtained="";, но теперь мне нужно получить «todaysDataObhibited» из базы данных dexie, но все, похоже, основано на обещаниях, и фактическая настройка переменной немедленно возвращается «», несмотря на то, что консоль говорит, что переменная должна теперь должен быть установлен на "не установлено"

var todaysDataObtained="";

db.todaysShift.toArray().then((records) => { 
   todaysDataObtained= records[0]["theDate"];
   console.error ("todaysDate is "+records[0]["theDate"]);
  }).catch (function (error) {
   console.error ("Transaction aborted due to error: " + error);
   console.error ("todaysDate is NOT set");
   todaysDataObtained="not set";
  });

alert(todaysDataObtained);

Итак, как мне вернуть запись базы данных в переменную javascript, заставляя javascript ждать, пока обещание не будет выполнено, и правильно установить var в обещаниях.

Как только переменная будет установлена, я могу использовать ее, чтобы заставить пользователя войти в систему, чтобы получить todaysData, или пропустить этот шаг и двигаться дальше, зная, что у меня уже есть заполненная база данных.

Спасибо, Кевин,


person completerookie    schedule 14.11.2016    source источник


Ответы (1)


так работают обещания. Это действительно асинхронная операция, позволяющая вашему браузеру одновременно отображать некоторый HTML или делать другие вещи. alert(todaysDataObtained); происходит перед любым обратным вызовом. Вам действительно следует начинать логику вашего приложения с обратного вызова и, кроме того, не использовать для него обработчики catch:

db.todaysShift.toArray().then(records => { 
  if (record.length === 0) {
    // startup with empty db
  } else {
    // startup with data if that is any different 
    // from the first case
  }
})
.catch (error => {
    // error handling
});
person Stefan Sechelmann    schedule 17.11.2016