在更新状态和重定向之前等待所有承诺解决

Posted

技术标签:

【中文标题】在更新状态和重定向之前等待所有承诺解决【英文标题】:Wait for all promises to resolve before updating state and redirect 【发布时间】:2021-06-27 08:19:53 【问题描述】:

我下面代码中的.then() 是在上传一张图片后触发的。那时更新我的​​状态变量并进行重定向还为时过早。在继续之前,我应该等待所有文件上传。有人可以为我指明实现这一目标的方向吗?

 const storageRef = app.storage()
 const [files, setFiles] = useState([])
 const [data, setData] = React.useState()

  const handleSubmit = () => 
    files.forEach((file) => 
      storageRef
        .ref(`$data.firebaseRef/$file.id`)
        .put(file)
        .then(() => 
          // Only if all files are uploaded to firebase then I need to do something
        )
    )
  

提前致谢!

【问题讨论】:

【参考方案1】:

使用Promise.all() 等待所有承诺解决后再做其他事情:

const handleSubmit = () => 
  Promise.all(files.map(file =>
    storageRef
      .ref(`$data.firebaseRef/$file.id`)
      .put(file)
  )).then(() => 
    // Only if all files are uploaded to firebase then I need to do something
  )

【讨论】:

嘿@Ori,这对我不起作用。 .then() 被立即调用 我的结构有误,您的答案按预期工作。谢谢!

以上是关于在更新状态和重定向之前等待所有承诺解决的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC框架如何实现请求转发和重定向呢?

Linux命令(cp mv cat和重定向)

HttpServlet的转发和重定向

在 Vue.js 中捕获和重定向 JWT 令牌过期,而不阻塞 Vue 3 中的其他 401 错误

也面跳转和重定向

使用 UserPassesTestMixin(基于类的视图)和重定向