[英]NodeJS - Using Async/Await inside Array.map with 'if' statement
[英]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.