gpt4 book ai didi

javascript - 使用异步迭代来链接 promise

转载 作者:行者123 更新时间:2023-12-03 12:37:38 25 4
gpt4 key购买 nike

我有一系列要上传的项目 ( projects ),按顺序一一上传。

我知道如何通过构建 promise 链来做到这一点,但我想尝试使用 async迭代器和 for...await .

首先,我将项目映射到箭头函数,该函数在调用时会调用上传;然后我创建一个 async可通过 async 迭代生成器函数。

然后我使用 for...await循环遍历 async可迭代的。

这是惯用的方法吗?

例如,(p)=>()=>upload(p)对我来说看起来很奇怪,IIFE 也是如此 (async function*() { for (let p of arr) yield p() }()) .

const upload = ({name}) => 
new Promise((resolve) =>
setTimeout(() => resolve(`Response for upload of: ${name}`), 1000))

const asyncIter = (arr) => (async function*() { for (let i of arr) yield i() }())

const uploadInSeries = async (arr) => {
const iter = asyncIter(arr.map((i) => () => upload(i)))
for await(let response of iter) {
console.log(response)
}
}

const projects = [{ name: "P1" }, { name: "P2" }, { name: "P3" }]
uploadInSeries(projects)

最佳答案

这不是异步可迭代的用例。只有当您不知道是否有下一个元素时,异步迭代才有意义。但是,在您的情况下,请求的数量已经知道,因此您可以这样做

 for(const el of arr)
await request(el);

关于javascript - 使用异步迭代来链接 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60582568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com