如果我们定义这样的实用函数:
/**
* Delete the entire database
*/
export async function deleteDatabase(db) {
await db.delete()
}
我们称之为
deleteDatabase(db)
nextFunction()
然后在db.delete()
完成正确操作之前不会调用下一个功能吗?
我认为这是工作原理,所以我只想确认语义。
为对实际用例感兴趣的人将答案纳入此DexieJS演示中:
答案 0 :(得分:7)
“那么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)
答案 1 :(得分:3)
deleteDatabase(db)
此表达式立即返回promise。
因此nextFunction()
将在db.delete()完成之前被调用
您也应该等待deleteDatabase(db)
答案 2 :(得分:2)
如果它们处于异步上下文中,则不会调用下一个函数,仅当您将await放在deleteDatabase之前
赞:
async myFunc(db) {
await deleteDatabase(db)
nextFunction()
}
甚至:
async myFunc(db) {
return deleteDatabase(db)
.then(() =>
nextFunction()
)
}
答案 3 :(得分:1)
如果您这样称呼
deleteDatabase(db)
nextFunction()
下一个函数将在您不等待时立即被调用。
您需要等待
await deleteDatabase(db)
nextFunction()