РЕДАКТИРОВАТЬ : С тех пор я начал использовать обычную библиотеку запросов для конвейерной передачи, которая позволяет обрабатывать ошибки нормально.С учетом вышесказанного, моей единственной проблемой остается тот редкий случай, когда программа не завершается должным образом и требует ручного завершения.Я считаю, этот пост - та же проблема, с которой я сталкиваюсь сейчас.
У меня есть программа, которая загружает изображения из URL-адресов, полученных через файл JSON.При больших запросах (более 80 изображений) я получу ошибки в паре файлов, таких как ETIMEDOUT и Socket Hangup.
Я пытаюсь выяснить, где именно нужно отлавливать эти необработанные ошибки обещания, возникающие по мере их появления.заставить мою программу некорректно завершать работу, иногда вынуждая пользователя нажать Ctrl + C, чтобы прекратить выполнение программы.
request({ uri: url, json: true })
.then((data) => {
const fileArray = [];
data.posts.forEach((el) => {
if (!el.filepath) return;
fileArray.push(el.filepath);
});
return fileArray;
})
.then((arr) => {
arr.forEach(el => {
request.head(el, () => {
request({ url: el, encoding: null, forever: true })
.pipe(createWriteStream(el))
.on('close', () => { console.log('File Downloaded!'); })
.on('error', (e) => { console.log(e); });
});
});
})
.catch((error) => console.log(error));
Первый блок запроса кода должен быть неактуальным, поскольку ошибки при загрузке файла НЕна запрос данных JSON.К .pipe () прикреплен обработчик .on 'error'.Насколько мне известно, request.head () не «тогда способен», и окружение цикла forEach в try / catch также не работает.
Я не совсем уверен, как обойти эти ошибкино на данный момент программа работает достаточно хорошо, так что я просто хочу убедиться, что пока могу отлавливать любые ошибки, чтобы улучшить взаимодействие с пользователем.