Как обрабатывать ошибку ETIMEDOUT?
Как обрабатывать ошибку etimedout при этом вызове?
var remotePath = "myremoteurltocopy"
var localStream = fs.createWriteStream("myfil");;
var out = request({ uri: remotePath });
out.on('response', function (resp) {
if (resp.statusCode === 200) {
out.pipe(localStream);
localStream.on('close', function () {
copyconcurenceacces--;
console.log('aftercopy');
callback(null, localFile);
});
}
else
callback(new Error("No file found at given url."), null);
})
Есть ли способ подождать дольше? или снова запросить удаленный файл?
Что именно может вызвать эту ошибку? Только время ожидания?
Ответы
Ответ 1
Это вызвано тем, что ваш запрос не получен в заданное время (по опции timeout
request module).
В основном, чтобы сначала поймать эту ошибку, вам нужно зарегистрировать обработчик на error
, поэтому необработанная ошибка больше не будет выбрана: out.on('error', function (err) { /* handle errors here */ })
. Еще несколько объяснений здесь.
В обработчике вы можете проверить, является ли ошибка ETIMEDOUT, и применить свою собственную логику: if (err.message.code === 'ETIMEDOUT') { /* apply logic */ }
.
Если вы хотите снова запросить файл, я предлагаю использовать node-retry или node-backoff. Это делает вещи намного проще.
Если вы хотите подождать дольше, вы можете установить timeout
вариант запроса. Вы можете установить его на 0 без тайм-аута.
Ответ 2
Мы могли бы посмотреть объект ошибки для свойства code
, в котором упоминается возможная системная ошибка, а в случае ETIMEDOUT
, когда сетевой вызов завершается с ошибкой, действуют соответственно.
if (err.code === 'ETIMEDOUT') {
console.log('My dish error: ', util.inspect(err, { showHidden: true, depth: 2 }));
}
Ответ 3
Как справиться с этой ошибкой ESOCKETTIMEOUT в почтальоне. В случае ошибки запроса появляется это сообщение об ошибке ESOCKETTIMEOUT и не продолжаются остальные тесты. Пожалуйста, смотрите скриншот как из коллекции, так и из консоли. введите описание изображения здесь