我可以从dexie DB获取值而不使用内置的promises

时间:2016-11-14 01:21:50

标签: dexie

我正在编写一个需要从中断处重新启动的离线网页。 我已经有了读取大型JSON数组的页面,它构建了各种表,它从表中读取,现在我需要继续用户离开的地方"

在javascript中,我通常会得到一个值var todaysDataObtained=""; 但现在我需要得到" todaysDataObtained"来自dexie数据库,但一切似乎都基于承诺,var的实际设置立即返回""尽管控制台说var现在应该设置为"不设置"

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等到promise完成并在promise中正确设置var。

一旦设置了var,我就可以使用它来强制用户登录以获取todaysData或跳过该步骤并继续前进,知道我已经有一个填充的数据库

谢谢Kevin,

1 个答案:

答案 0 :(得分:0)

这是Promises的工作方式。它实际上是一个异步操作,让你的浏览器可能会渲染一些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
});