如何等待直到Node.js中的流异步执行

N S*_*rma 2 javascript node.js async-await

嗨,我有一个异步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");
    })
};
Run Code Online (Sandbox Code Playgroud)

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

await mapping.deleteMapping(cookie);
Run Code Online (Sandbox Code Playgroud)

有人知道如何处理吗?

Str*_*ch0 5

您的函数不需要异步,因为您没有在函数内调用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");
        })

    })

};
Run Code Online (Sandbox Code Playgroud)

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