async 同步执行问题

发布于 2022-09-13 01:02:44 字数 447 浏览 11 评论 0

我在用electron 我打算创建一个sqlite文件后 执行数据库迁移,然后export db
但是我写了 一个类似下面这样的同步方法 打印结果 1,3,5,4,2

(async ()=>{
  console.log('------1------')
  setTimeout(()=>{
    console.log('------2------------')
  },5000)
  console.log('--------3-----------')
  await test();  //数据库迁移
  console.log('------4------')
})();

console.log('------5------')

我在想无论我写的同步是否执行都应该打印 1,3,4,5,2.
为什么我同步执行的 会阻塞4 而不会阻塞5呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

余生一个溪 2022-09-20 01:02:44

先试着把async/await转换成Promise

new Promise(resolve => {
  console.log('------1------')
  setTimeout(()=>{
    console.log('------2------------')
  },5000)
  console.log('--------3-----------')
  new Promise((resolve) => {
    resolve()
  }).then(()=>{
    console.log('------4------')

  })
})

console.log('------5------')

自执行函数是async的,4和5不在一个阶段

江心雾 2022-09-20 01:02:44

async 函数中 在await前是同步的
也就是 1,3,5 都是同步 2(因为setTimeout)、4 是异步的

送你一个梦 2022-09-20 01:02:44

同步执行 指的是 async内部的 await与await 之后的代码关系。 不是指async函数 与其他函数的关系。async 执行碰到 await 然后执行了await语句 会返回一个未完成的promise。

罪#恶を代价 2022-09-20 01:02:44

async函数执行需要加上await关键字才会阻塞下面的程序,就像test执行那样

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文