所以我知道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)
}
我的问题是我内部还有其他承诺,想知道Promise.all()是否也会以正确的顺序在地图内执行那些承诺。
编号
Promise.all()
将创建一个承诺,当传递给它的所有承诺均得到解决时,该承诺将解决。它对这些承诺的解决顺序没有影响。
如果要处理images
的每个值按顺序(而不是并行处理),则使用常规的for
循环。