Использование Async / Await с Array.map - PullRequest
0 голосов
/ 14 февраля 2020

Итак, я знаю, что 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)
        }

1 Ответ

4 голосов
/ 14 февраля 2020

Мой вопрос заключается в том, что у меня есть другие обещания внутри, и мне было интересно, выполнит ли Promise.all () также те, что на карте, в правильном порядке.

Нет.

Promise.all() создаст обещание, которое разрешается, когда все обещания, переданные ему, разрешаются. Это не влияет на порядок выполнения этих обещаний (и не может, потому что они начнут выполняться до вызова Promise.all).

Если вы хотите иметь дело с каждым значением images в последовательности (а не параллельно), затем используйте обычный for l oop.

...