【问题标题】:async function has old state React-Redux异步函数具有旧状态 React-Redux
【发布时间】:2019-12-27 19:08:43
【问题描述】:

我正在开发一个 React 项目,用户可以在其中上传和删除项目中的照片。上传新图像后,只有选择了相应的项目,用户才能看到它。检查的解决方案相当简单

if 
(selectedProject.projectID=== imageMetadata.projectID)

在哪里

  • selectedProject.projectID:当前选中项目的ID(来自 Redux 商店)
  • imageMetadata.projectID:上传图片所属的项目ID。

所有这些都是在 async 函数中完成的,我们面临的问题是,即使在 selectedAlbum.albumID 在其他任何地方都发生了变化,这个函数仍然有它的旧值。是因为函数是异步的吗?

这是我的代码:

 let projectId = selectedProject.projectID;
 const responses = await Promise.all(
   filesToUpload.map( async (file) => {
     let res = await imageStoreApiHandler.uploadPhoto(file, projectId);
     notifyUploadProgress(count++, total, notifcationKey);
     if (res.status === 200) {
       let imageMetadata: any = res.data[0];
       if (selectedProject.projectID === imageMetadata.projectID) {
         addImage(imageMetadata);
       }
     }
     return res;
   }));

【问题讨论】:

  • 你是在动作里面做的吗?
  • 在onClick事件里面做的,动作是什么意思?
  • 一个 redux 操作 :)。可能需要更多代码来解决问题
  • 以上编辑粘贴完整功能。是什么导致了这个问题?您能否就如何解决此问题提供一些指导?

标签: javascript reactjs async-await react-redux


【解决方案1】:

这可能是上传处理程序不断缓存第一个函数的闭包问题。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

也许写一个函数,它会根据参数当前项目 id 返回一个 promise all 数组。

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2019-12-05
    • 2019-03-20
    • 2017-10-23
    相关资源
    最近更新 更多