IndexedDB 提取时在“.then”内更新的变量未在Javascript中反映到外部

bf1o4zei  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(103)

我尝试在fetch中更新.then中的IndexedDB数据,但在事件处理程序中不起作用,因为我从这篇文章post-link中了解到这一点。在.then之外更新IndexedDB数据是有效的。所以我创建了一个布尔变量,并尝试在.then中更新它,并考虑在"the之外更新IndexedDB数据,但布尔值在. then中没有得到更新。

.then(() =>{
        data_inserted = true ;
      })

现在外面的“.then”

console.log(data_inserted); // value is false
      if ( data_inserted === true )
      {
// update IndexedDB code
      }

我看到了这个帖子post-link,我不知道如何做一个回调函数,因为他们对我的代码。
请帮助我更新布尔变量。
先谢谢你。

nom7f22z

nom7f22z1#

我怀疑这是对异步代码缺乏理解。
异步代码then将发生在它后面的代码之后。注意:

let foo = "bar"
someFunctionThatTakesOneSecond()
    .then((res) => {
        foo = "baz"
        console.log("then: ", foo); 
    })
console.log("there: ", foo)

将输出:

there: bar
 then: baz

为什么呢?因为then中的代码要等到'someFunctionThatTakesOneSecond”完成并实现了承诺之后才运行。但是async块之后的代码将同步运行(即:立即)。
您可能希望改用async/await模式-await停止进一步执行,直到async函数返回。
因此:

let foo = "bar"
await someFunctionThatTakesOneSecond()
foo = "baz"
console.log("then: ", foo); 
console.log("there: ", foo)

将输出:

then: baz
 there: baz

请在此处阅读有关async/await和异步JavaScript的更多信息:https://blog.logrocket.com/understanding-asynchronous-javascript/

相关问题