2

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

在 javascript 中,我通常会得到一个值var todaysDataObtained=""; ,但现在我需要从 dexie 数据库中获取“todaysDataObtained”,但一切似乎都基于承诺,并且 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 或跳过该步骤并继续知道我已经获得了填充的数据库

谢谢凯文,

4

1 回答 1

0

这就是 Promise 的工作方式。这实际上是一个异步操作,让您的浏览器可以同时呈现一些 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
});
于 2016-11-17T13:26:02.983 回答