代码之家  ›  专栏  ›  技术社区  ›  Ben Aston

使用异步iterable链接承诺

  •  3
  • Ben Aston  · 技术社区  · 6 年前

    我有很多东西( projects

    我知道如何通过构建承诺链来实现这一点,但我想尝试使用 async for...await .

    异步 可通过 发电机功能。

    然后我用 等待…等待 环游世界 异步 无法忍受。

    例如, (p)=>()=>upload(p) 我觉得很奇怪,生活也是如此 (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)
    1 回复  |  直到 6 年前
        1
  •  3
  •   Jonas Wilms    6 年前

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

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