节点js中的异步等待,其中readline位于for循环中

时间:2019-01-12 22:36:49

标签: node.js for-loop stream async-await

因此,我无法强制for循环在执行下一次迭代之前等待流关闭。

似乎流数据和异步/等待似乎不相处(尤其是在for循环中)。可能的解决方法是将所有内容放入无限while循环(而不是for循环),然后使用POSIX互斥锁类型方法(设置了一个标志,阻止打开一个流,直到该流关闭时该标志被重置为止)。 ,并且计数器会更新)。但是必须有某种方法可以使用async / await来完成它。

下面是一些测试代码:

async function bulk_search(an_array)
{    
    var name = "";
    var found = false;

    for(let i = 0; i < 10; i++)
    {
        for(let j = 0; j < 10; j++)
        {
            for(let k = 0; k < 10; k++)
            {
                console.log(i + ", " + j + ", " + k);
                file_stream = fs.createReadStream(__dirname + '/a_directory/a_file.csv');

                file_stream.on('error', function (err) {
                    return an_array;
                });

                csv_file = readline.createInterface({
                    input: file_stream
                });

                name = an_array[i][j][k];
                found = false;

                csv_file.on('line', function (line) {                   
                    if(name == line)
                    {
                        found = true;
                        csv_file.close();
                    }
                });

                await csv_file.on('close', function() {
                    console.log("Closing Stream");
                    if(found == false)
                    {
                        an_array[i][j][k] = "";
                    }
                    if((i == 9) && (j == 9) && (k == 9))
                    {
                        return an_array;
                    }
                });
            }
        }
    }
}

0 个答案:

没有答案