Обработка ошибки Nod.js, действие не завершается
-
Требуется чтобы Нода корректно (без задержки) возвращала ответ и корректно обрабатывала ошибку при отсутствии интернета (для проверки можно разорвать подключение по локальной сети) (ошибка будет {"errno":"ENOTFOUND","code":"ENOTFOUND","syscall":"getaddrinfo","hostname":"encrypted.google.com"}
Код скрипта:const https = require('https'); await(new Promise((resolve, reject) => { var options = { hostname: 'encrypted.google.com', port: 443, path: '/', method: 'GET' }; var req = https.request(options, (res) => { console.log('statusCode:', res.statusCode); console.log('headers:', res.headers); res.on('data', (d) => { console.log(d); }); }); req.end(); req.on('error', (e) => { console.log('ошибка'); console.log(e); resolve() }); }));
Если я resolve() ставлю там где ошибка (как в коде), то скрипт отрабатывает, но действие не завершается сразу, только после таймаута.
Если я resolve() ставлю после основного ответа (т.е. после console.log(d);), то при отсутствующем интернете, то я получаю ошибку (мне это и надо), но но действие не завершается сразу, только после таймаута.Мне требуется чтобы после выполнения блока Node.js скрипт БАС продолжил свою работу (т.е. не должно писать красным в лог, с остановкой). При этом при работающем интернете в лог выводился основной ответ (переменная "d"), при отсутствии интернета - выводилась ошибка ({"errno":"ENOTFOUND".....). И все это было без задержек Ноды в 1 минуту.
Полагаю тут нужно добавить условный оператор. Не силен в Ноде. Буду благодарен за любую помощ.
-
@botovod у вас в запросе нет обработчика ошибки, подойдёт даже такой вариант:
const https = require('https'); await(new Promise((resolve, reject) => { var options = { hostname: 'encrypted.google.com', port: 443, path: '/', method: 'GET' }; var req = https.request(options, (res) => { console.log('statusCode:', res.statusCode); console.log('headers:', res.headers); res.on('data', (d) => { console.log(d); resolve() }); res.on('error', (e) => { console.log('ошибка'); console.log(e); resolve() }); }); req.end(); req.on('error', (e) => { console.log('ошибка'); console.log(e); resolve() }); }));