javascript - Nodejs 中用于递归获取 promise 的异步生成器

标签 javascript node.js async-await generator

我正在尝试递归扫描 mysql 表并批量处理行。 ids 相当于行数组,promise1 获取一大块行并 promise2 处理它们。这是我到目前为止所实现的。这按预期工作。我如何改进它以进一步简化?

const ids=[]
for(let i=0;i<50;i++){
    ids.push(i)
}
const promise1=(limit,after=-1)=>new Promise(r=>setTimeout(()=>r(ids.slice(after+1,after+limit+1)),1000))
const promise2=a=>new Promise(r=>setTimeout(()=>r(a.map(b=>b*2)),1000))
async function* promiseGen(){
    let limit=10
    let after=-1
    while(true){
        let pr1=await promise1(limit,after)
        if(pr1.length==0){
            break
        }
        yield pr1
        console.log(pr1)
        after=pr1[pr1.length-1]
    }
}
async function processor(){
    let pr1=promiseGen()
    let result=[]
    while(true){
        let data=await pr1.next()
        if(data.done){
            break
        }
        let res=await promise2(data.value)

        result.push(res)

    }
    return result
}

processor().then(res=>console.log(res))

最佳答案

使用 for await … of loop :

async function processor() {
    const result = [];
    for await (const val of promiseGen()) {
        result.push(await promise2(val))
    }
    return result;
}

关于javascript - Nodejs 中用于递归获取 promise 的异步生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53851678/

相关文章:

node.js - 为什么这个 Promise 的 then 回调从未被调用?

javascript - jade 的语法支持 switch 语句吗?

python-3.x - 在后台同时运行 asyncio 任务

c# - 使用 Moq 针对异步方法设置 C# 测试

c# - 使用 FileStream.WriteAsync() 时,再次调用该方法时会发生什么

javascript - 将光标移动到下一个 contentEditable - JQuery

javascript - 无法使用 Scrapy 从下拉列表中抓取

javascript - FileReader只会读取小文件,否则返回null

javascript - 如何使 tx.executeSql() 函数与 async/await 同步?

javascript - 从字符串 api 响应 aws lambda 中删除 '\'