Promise返回字符串数组,稍后在代码中它为空



所以我有一个提交处理程序,它应该获取一些预签名的URLS用于图像上传,然后上传图像,然后继续提交另一个最终请求。它的轮廓看起来是这样的:

const handleSubmit = async () => {
try {
const presignedUrls = await getPresignedUrls(someData)
console.log(presignedUrls) -> // ['someUrl.png', 'someUrl2.png', ...]
const arrayOfRequests = getUploadRequests(someData, presignedUrls)
await Promise.all(arrayOfRequests)
console.log(presignedUrls) -> // []
await postData({ ...someData, imageUrls: presignedUrls })
} catch (error) {
...
}
}

一切都很好,而且它按正确的顺序做每件事,但问题是我想包括我在最后一次发布请求中使用的预签名URL,但由于某种原因,当我稍后尝试再次访问它时,该数组是空的。

我不知道为什么。

好吧,所以在写这个问题的时候,我发现了我愚蠢的错误(我猜so也很适合橡胶躲避🤪 ),但我想我无论如何都会贴出来。问题是,在getUploadRequests()内部,我将相应的图像数据与presignedUrls数组中的预签名url一起映射,一旦我使用了一个url,我就对数组进行切片以从数组中删除该url,而没有创建新的临时数组,因此对象引用仍然指向同一个数组,因此,一旦我用完了所有预签名的url,数组就为空。

通过将URL扩展到getUploadRequests(someData, [...presignedUrls])或通过在getUploadRequests()内创建一个带有URL的新数组来修复此问题。

我想是时候去度假了。

相关内容

  • 没有找到相关文章

最新更新