与Array.map一起使用异步/等待

问题描述 投票:0回答:1

所以我知道async / await将不适用于map。我只是返回我的请求,并使用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)
        }
javascript arrays async-await
1个回答
3
投票

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

编号

Promise.all()将创建一个承诺,当传递给它的所有承诺均得到解决时,该承诺将解决。它对这些承诺的解决顺序没有影响。

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

© www.soinside.com 2019 - 2024. All rights reserved.