这个问题可能是由于与端点的失去连接引起的,可以在代码中加入重试逻辑:
const https = require('https');
function getData(options, tries = 0) {
return new Promise((resolve, reject) => {
https.get(options, res => {
res.setEncoding('utf8');
let body = '';
res.on('data', data => {
body += data;
});
res.on('end', () => {
resolve(body);
});
}).on('error', e => {
if (tries < 3) {
console.log(`Error on try ${tries}: ${e.message}`);
const newTries = tries + 1;
setTimeout(() => {
console.log(`Retrying (${newTries})...`);
resolve(getData(options, newTries));
}, 1000 * newTries);
} else {
reject(e);
}
});
});
}
const options = {
hostname: 'example.com',
port: 443,
path: '/',
method: 'GET'
};
getData(options)
.then(body => {
console.log(body);
})
.catch(e => {
console.error(e);
});
这个例子中,我们尝试访问一个HTTPS端点,并在错误发生时进行了重试。如果重试的次数超过了3次,就停止尝试并拒绝承诺。