Я хотел бы выполнить функцию, которая будет проверять первый запрос с прокси, а другой - без прокси.
Мой тест работает, но мое обещание не выполняется, если функция перезапускается:
const downloadFile = (configuration, proxy = true) => {
return new Promise((resolve) => {
// Save variable to know progress
let receivedBytes = 0;
let totalBytes = 0;
let requestFile = {
method: 'get',
headers: {
'Content-Type': 'application/ld+json',
'Authorization': `Bearer ${configuration.token}`
},
url: configuration.remoteFile
};
if (proxy) {
requestFile = { ...requestFile, proxy: `${process.env.PROXY}:${process.env.PROXY_PORT}` };
}
console.info(requestFile);
const out = fs.createWriteStream(configuration.localFile);
const req = request(requestFile);
req.pipe(out);
req
.on('response', (data) => {
console.info(data);
if (data.statusCode === 200) {
totalBytes = parseInt(data.headers['content-length']);
configuration.onStart();
} else {
console.info(data.statusCode);
}
})
.on('data', (chunk) => {
// Get progress if callback exists
if (configuration.hasOwnProperty('onProgress')) {
receivedBytes += chunk.length;
configuration.onProgress(receivedBytes, totalBytes);
} else {
return receivedBytes += chunk.length;
}
})
.on('error', (error) => {
console.info(error);
if (proxy) {
downloadFile(configuration, false);
}
})
.on('end', () => {
console.info('end');
resolve(configuration.onEnd());
});
});
};
Если первый запрос возвращает ошибку, я передаю второй, то в моем событии end. Но обещание не выполнено :(
У кого-нибудь есть идея?
Спасибо сообществу!





Вы можете явно указать код для генерации конечного события из события ошибки. Это решит обещать .
req.on('response', (data) => {
// some code
})
.on('data', (chunk) => {
// some code
})
.on('error', (error) => {
this.emit("end");
})
.on('end', () => {
resolve();
});