javascript - 如何在多个 Axios 调用上运行回退?

标签 javascript vue.js vuejs2 axios

在我的应用中,一条评论可以是父评论,也可以有子评论。删除父评论时,我正在检查 child 是否存在;如果是这样,我也会删除它们(每个都有一个单独的 Axios 调用)。

但是一旦完成所有这些,我需要运行一些刷新代码。有没有一种简单的方法可以实现这一目标?我可以在哪里放置刷新代码?

到目前为止,这是我的代码:

deleteCommentAxiosCall (id) {
  return this.$axios.delete(`/api/v1/comment/${this.comment.id}`)
},
deleteComment () {
  return new Promise((resolve, reject) => {
    this.deleteCommentAxiosCall(this.comment.id)
    if (this.comment.child_comments.length) {
      this.comment.child_comments.forEach((child) => {
        this.deleteCommentAxiosCall(child.id)
      })
    }
  })
  window.location.reload() // refresh code

最佳答案

您必须链接 promise 以确保删除在刷新之前得到解决。使用 Promise.all()一次等待几个 promise 。在这种情况下,您将等待删除父评论和子评论。

deleteComment () {
  return Promise.all([
    this.deleteCommentAxiosCall(this.comment.id),
    this.comment.child_comments.map(child => this.deleteCommentAxiosCall(child.id))
  ])
  .then(() => window.location.reload())
}

或使用 async function :

async deleteComment () {
  await Promise.all([
    this.deleteCommentAxiosCall(this.comment.id),
    this.comment.child_comments.map(child => this.deleteCommentAxiosCall(child.id))
  ])
  window.location.reload()
}

另外:重新加载页面对用户来说可能有些不和谐。也许一种更无缝的刷新评论的方法是通过显式 API 请求重新请求评论。示例:

this.$axios.get(`/api/v1/comments`).then(resp => this.comments = resp.data.comments)

关于javascript - 如何在多个 Axios 调用上运行回退?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55422988/

相关文章:

javascript - 为什么 Javascript 在设置变量时速度很慢?

javascript - 解析 HTTP 接受 header

javascript - "call stack"和 "task queue"之间的区别

javascript - 禁止经过身份验证的用户访问nuxt js中的登录页面

javascript - Vue中如何让组件标签以前缀开头?

javascript - 将字符颜色从一个设置为另一个

vue.js - 如何更改 Vue2 日期范围选择器选择的日期格式?

typescript - Ts-Jest Typescript诊断:错误TS2307:找不到模块

vue.js - 我可以向 Vuetify datepicker 添加自定义翻译吗?

vuejs2 - Vuex 存储状态未定义