异步函数具有旧状态React-Redux

时间:2019-12-16 11:03:38

标签: javascript reactjs async-await react-redux

我正在研究一个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;
   }));

1 个答案:

答案 0 :(得分:0)

这可能是一个关闭问题,其中上载处理程序不断缓存第一个函数。

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

也许编写一个函数,该函数将根据当前项目ID的参数返回一个promise数组。