如果我们像这样定义一个实用程序函数:
/**
* Delete the entire database
*/
export async function deleteDatabase(db) {
await db.delete()
}我们称之为。
deleteDatabase(db)
nextFunction()那么下一个函数将不会在db.delete()完成之前调用,对吗?
我认为这就是它的工作方式,所以我只想确认一下语义。
DexieJS演示
为那些对实际用例感兴趣的人将答案合并到这个DexieJS演示中:
发布于 2020-01-23 11:29:57
deleteDatabase(db)这个表达式立即返回承诺。
因此,nextFunction()将在db.delete()完成之前被调用
你也应该等待deleteDatabase(db)
发布于 2020-01-23 11:30:22
“那么在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)发布于 2020-01-23 11:30:42
如果它们处于异步上下文中,则不会调用下一个函数,只有当将等待置于deleteDatabase之前时,才会调用deleteDatabase
如下所示:
async myFunc(db) {
await deleteDatabase(db)
nextFunction()
}甚至:
async myFunc(db) {
return deleteDatabase(db)
.then(() =>
nextFunction()
)
}https://stackoverflow.com/questions/59877404
复制相似问题