为什么异步函数在 await 之后继续(在 vuex 中)

Why async function continues after await (in vuex)

从一个 vuex 操作 (togglePostLike) 我正在尝试使用 async/await 等待另一个 vuex 操作 (requiresAuth)。

我曾预计,如果 return Promise.resolve() 从未被调用,那么第一个操作应该在 await dispatch 处停止(并收集垃圾),但它会继续进行 console.log('this is called SECOND') 即使没有决心。

不应该 await 在没有解决的情况下停止执行吗?我怎样才能得到预期的行为?

/store/modules/post.js

async togglePostLike ({ dispatch, rootState }, post) {
    await dispatch('user/requiresAuth', null, { root: true })
    console.log('this is called SECOND, but why without resolve')
    // I don't want this stuff to execute without the resolve
    if (post.likes.includes(rootState.user._id)) {
      dispatch('addPostUnlike', post)
    } else {
      dispatch('addPostLike', post)
    }
},

/store/modules/user.js

async requiresAuth ({ state }) {
      if (!state.authenticated) {
         router.push({ name: 'login', query: { comeBack: true } })
         $(`.modal`).modal('hide')
         console.log('this is called first')
       } else {
         console.log('this is NOT called')
         return Promise.resolve()
       }
  },

编辑:没有 async/await

的样子

据我所知,vuex docsdispatch returns 反正是一个承诺。使用以下内容:

post.js

if (dispatch('user/requiresAuth', null, { root: true })) {
     // still executes before return false   
}

user.js

requiresAuth ({ state }) {
  if (!state.authenticated) {
     // do stuff (does it)
     return false
   }
   return true
}

requiresAuth 这样的 async function 总是 return 是一个用 return 值解决的承诺(如果没有 return,则包括 undefined语句进行评估)。函数结束时没有 returnreturn;return undefined;return Promise.resolve() 还是 return Promise.resolve(undefined) 都没有区别 -他们从外面无法区分。

要么 return 一个布尔值然后对其进行分支,要么只是抛出一个异常。