首页 > 解决方案 > 异步等待实用程序功能同步?

问题描述

如果我们这样定义一个效用函数:

/**
 * Delete the entire database
 */
export async function deleteDatabase(db) {
  await db.delete()
}

我们称之为。

deleteDatabase(db)
nextFunction()

db.delete()那么在完成正确之前不会调用下一个函数吗?

我认为这就是它的工作原理,所以我只想确认语义。

DexieJS 演示

对于那些对实际用例感兴趣的人,将答案合并到这个 DexieJS 演示中:

https://stackblitz.com/edit/typescript-dexie-one-to-many

标签: javascriptnode.jsasync-await

解决方案


“那么在完成之前不会调用下一个函数对db.delete()吗?” 错误的。它将在异步操作完成之前调用。

const delay = ms => new Promise(resolve => setTimeout(resolve, ms))

async function deleteDatabase() {
  console.log('Deleting DB')
  await delay(1000)
  console.log('DB deleted')
}

function nextFunction() {
  console.log('Next function')
}

deleteDatabase()
nextFunction()

您需要有另一个async/await包装函数或用于.then链接承诺

deleteDatabase().then(nextFunction)

推荐阅读