@Gorod_b

Как синхронно отправить запрос при построчном чтении файла?

Я совсем недавно познакомился с JS и асинхронным программированием, поэтому до сих пор испытываю сложности, когда встречаюсь с асинхронным выполнением кода.

Цель - протестировать один сервис, для этого я выгрузил в файл в формате JSON все записи, из которых формируются урлы для запросов. И нужно проверить каждую запись, отправив для нее отдельный запрос. 10к записей успешно выгрузились, все читается, но когда я начал читать построчно файл столкнулся с проблемой, что запросы уходят асинхронно на не сформированные урлы, и возвращаются соответственно 500-е ошибки

Для отправки запросов использую request-promise
Для построчного чтения byline

var user = api.webAuthorize(qaqaqa);

user.then(() => {
	var file = './assets.json';
	var stream = byline(fs.createReadStream(file, { encoding: 'utf8' }));
	stream.on('data', (line) => {
		var parsedLine = JSON.parse(line);
		api.getPlayList(parsedLine.asset).then((body) => {
			//обработка тела ответа
		});
	});
});


При том в другом месте использовал такую же конструкцию и все отрабатывалось успешно, но размер чанка при чтении файла там был больше, чем содержимое файла, полагаю, что из-за этого в том месте все не возникло проблем.

Может кто подсказать, как нужно правильно обработать 10к+ строк в файле и для каждой строки отправить запрос на сервер? Последовательность меня не сильно волнует, главное - обработать каждую запись.
  • Вопрос задан
  • 257 просмотров
Решения вопроса 1
@Gorod_b Автор вопроса
Проблема в итоге оказалась даже не в асинхронности, хоть и было похоже, а в скорости. Сервер не успевал обрабатывать и отвечал немного неправильно )
Нужно было просто добавить задержек.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
boratsagdiev
@boratsagdiev
Я обычно для таких задач использую модуль async (https://caolan.github.io/async/docs.html) и его метод mapLimit.

UPD: например так: https://gist.github.com/alcovegan/bb21d9f0760d992b...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы