我有这样的代码:
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')
看到一切都按预期工作。文档说选项应该相同,但默认值不同。