Асинхронное ожидание в узле JS с readline внутри цикла for - PullRequest
0 голосов
/ 13 января 2019

Так что я не могу заставить цикл for ожидать закрытия потока перед выполнением следующей итерации.

Кажется, что потоковые данные и async / await, похоже, не уживаются (особенно в циклах). Возможно, одним из способов решения этой проблемы может быть помещение всего в бесконечный цикл 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;
                    }
                });
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...