#javascript #node.js #loops
Вопрос:
У меня есть этот код:
const lineReader = require('line-reader');
var truevar = false;
async function readLines(filename, processLine) {
return new Promise((resolve, reject) => {
lineReader.eachLine(filename, (line, last, callback) => {
if (!callback) throw new Error('panic');
if (truevar) {
// I wanna stop/finish the function here
} else {
processLine(line)
.then(() => last ? resolve() : callback())
.catch(reject);
};
});
})
};
И вот как я вызываю функцию readLines:
await readLines('somefile.txt', async (line) => {
await delay(1000) // 1 second
other_function(line);
});
Мне нужно прекратить чтение файла и завершить весь процесс, как только он дойдет до определенной точки. Я прочитал документы для чтения строк, но ничего не нашел. Я также пытался сделать это грязным способом с помощью «break;» и т. Д., Но, Очевидно, это просто не завершит работу и застрянет (не может вызвать его снова, пока я не перезагружу программу), так что это бесполезно.
РЕДАКТИРОВАТЬ: исправлена проблема. Я забыл вернуть значение truevar обратно в false, чтобы иметь возможность снова вызвать функцию.
Ответ №1:
Попробуйте это:
lineReader.eachLine(filename, (line, last, callback) => {
if (!callback) throw new Error('panic');
if (truevar) {
// Add to stop reading
cb(false);
} else {
processLine(line)
.then(() => last ? resolve() : callback())
.catch(reject);
};
});
Комментарии:
1. Уже пробовал это. Не выполняет задание, потому что это приводит к зависанию асинхронной задачи, и сценарий ожидает завершения функции навсегда (как я предполагаю), потому что я не могу снова вызвать ту же функцию, пока не закрою программу.
Ответ №2:
Выяснил, почему я не смог снова вызвать функцию. Проблема не в том, что асинхронная функция не была остановлена должным образом, я просто не установил значение truevar
back в false, чтобы иметь возможность снова вызвать функцию.