【问题标题】:How to wait until stream async is executed in nodejs [duplicate]如何等到在nodejs中执行流异步[重复]
【发布时间】: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);

有人知道怎么处理吗?

【问题讨论】:

    标签: javascript node.js async-await


    【解决方案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");
            })
    
        })
    
    };
    

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

    【讨论】:

    • 您正在解析多次,因为我假设数据将被执行多次,您如何处理?
    • 那么不要在你的数据监听器中解决。只要下定决心就行了。当你收到数据时你想做什么? (更新答案以反映这一点)
    猜你喜欢
    • 2018-03-22
    • 2019-06-30
    • 2021-11-10
    • 2018-10-23
    • 2021-02-13
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多