Так что я не могу заставить цикл 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;
}
});
}
}
}
}