我正在编写一个需要从中断处重新启动的离线网页。 我已经有了读取大型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,
答案 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
});