繁体   English   中英

在 Array.map 中使用 Async/Await

[英]Using Async/Await with Array.map

所以我知道 async/await 不适用于地图。 我只是返回我的请求并使用Promise.all()来执行它们。 我的问题是,我在里面还有其他承诺,并且想知道Promise.all()是否也会以正确的顺序执行地图中的那些承诺。

这是代码:

const productImageIds = Object.keys(data.webImages)

        for(let i = productImageIds.length; i--;){
            const productId = productImageIds[i]
            const images = data.webImages[productId]
            const requests = images.map(async (image, i) => {
                const name = `${productId}_${i}.${image.split(`.`).pop()}`
                const imageStream = await downloadImage(image, name) // IS THIS WORKING CORRECTLY WITH USING PROMISE.ALL() ??
                const res =  sanityRequest({
                    ...sanityConfig,
                    type: `images`,
                    endpoint: `assets`,
                    contentType: `image/jpeg`,
                    body: imageStream,
                params: `?filename=${name}`,
                })


                    await unlinkSync(name) // IS THIS WORKING CORRECTLY WITH USING PROMISE.ALL() ??
                    return res

            })

            const uploadedImages = await Promise.all(requests)
        }

我的问题是,我在里面还有其他承诺,并且想知道 Promise.all() 是否也会以正确的顺序执行地图中的那些承诺。

不。

Promise.all()将创建一个承诺,当所有传递给它的承诺解决时,该承诺将解决。 它对这些Promise.all解析的顺序没有影响(并且不能,因为它们将在Promise.all被调用之前开始运行)。

如果images顺序(而不是并行)处理images每个值,请使用常规for循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM