如何等到在nodejs中执行流异步[重复]

Posted

技术标签:

【中文标题】如何等到在nodejs中执行流异步[重复]【英文标题】:How to wait until stream async is executed in nodejs [duplicate] 【发布时间】:2018-09-01 00:22:10 【问题描述】:

您好,我有异步 nodejs 功能,我正在使用流概念。我想一旦流完成然后我想从这个函数返回。

const removeMapping = async function (query) 

    let stream = query.foreach();
    stream.on('data', function (record) 
       client.delete(record);
    )
    stream.on('error', function (error) 

    )
    stream.on('end', function () 
        console.log("completed");
    )
;

我是这样调用这个函数的,但是在执行这一行之后,在这之后流异步代码。

await mapping.deleteMapping(cookie);

有人知道怎么处理吗?

【问题讨论】:

【参考方案1】:

你的函数不需要是异步的,因为你没有在函数中调用 await。

你可以做的是返回一个新的承诺:

const removeMapping = function (query) 

    return new Promise((resolve, reject) => 

        let stream = query.foreach();
        stream.on('data', function (record) 
            client.delete(record);
        )
        stream.on('error', function (error) 
            reject(error);
        )
        stream.on('end', function () 
           resolve("completed");
        )

    )

;

然后,您可以根据流中返回的内容解决或拒绝。

【讨论】:

您正在解析多次,因为我假设数据将被执行多次,您如何处理? 那么不要在你的数据监听器中解决。只要下定决心就行了。当你收到数据时你想做什么? (更新答案以反映这一点)

以上是关于如何等到在nodejs中执行流异步[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从请求中返回结果,以及在 NodeJS 中执行异步任务但没有回调之后

使用流异步读取文件时如何同步处理每一行/缓冲区[重复]

从每个回调调用中获取异步nodejs值[重复]

如何在飞镖中控制异步执行流程[重复]

nodejs函数中的返回值[重复]

NodeJs - 控制器内的异步/等待[重复]