У меня есть такой код:
const https = require('https');
const request = async (data, options) => {
return new Promise((resolve, reject) => {
const req = https.request(options, function(res) {
const chunks = [];
res.on('data', function(chunk) {
chunks.push(Buffer.from(chunk));
});
res.on('end', function() {
let body = Buffer.concat(chunks);
body = body.toString();
resolve(body);
});
});
if (data) {
req.write(JSON.stringify(data));
}
// this never fires, tried after comment below
req.on('timeout', () => {
console.log("This timed out")
})
// handle connection errors
req.on('error', reject);
req.end();
});
};
async function run() {
try {
const response = await request(null, {
method: 'GET',
hostname: 'example.com',
timeout: 1,
path: '/',
headers: {
'Content-Type': 'application/json'
}
});
console.log(response);
} catch (e) {
console.log(e);
}
}
run();
Документы на https://nodejs.org/api/http.html#http_http_request_options_callback говорят это о timeout
:
Число, указывающее время ожидания сокета в миллисекундах. Это установит тайм-аут перед подключением сокета.
Мой вызов, очевидно, займет более 1 мс, но я не получаю никаких ошибок. Что мне здесь не хватает?
Обновление
Я могу заставить req.on('timeout'
работать, когда я использую модуль http
вместо https
. Не уверен, почему это будет по-другому? Я буквально могу изменить require('https')
на require('http')
и посмотреть, как все работает, как ожидалось. Документы говорят, что параметры должны быть идентичными, но с разными значениями по умолчанию.