Это, вероятно, задавалось много раз, но я не смог найти подходящий пример для своего решения.Вот основной пример, когда я возвращаю обещание и высмеиваю тело ответа, чтобы оно не сработало.Я пытаюсь обработать исключение, чтобы перехватить его и правильно его зарегистрировать.
const request = require('request');
var url = "https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=BTC-STRAT&tickInterval=hour";
function requestMarketData() {
return new Promise(function(resolve, reject) {
request(url, function(err, res, body) {
if (err) {
console.log(err);
return reject(err);
}
console.log("GET: " + url);
var result = JSON.parse("<HTML>"); // make JSON.parse fail
return resolve(result);
});
});
}
async function getMarketData() {
var result = await requestMarketData();
}
getMarketData();
Первый способ, которым я пытаюсь его обработать;
async function getMarketData() {
try {
var result = await requestMarketData();
} catch(err) {
console.log("Failed result: " + err);
}
}
, который не сработал, что ожидаетсяиз-за асинхронной работы.
Второй способ с добавлением обработчика catch для возвращенного обещания;
function requestMarketData() {
return new Promise(function(resolve, reject) {
request(url, function(err, res, body) {
if (err) {
console.log(err);
return reject(err);
}
console.log("GET: " + url);
var result = JSON.parse("<HTML>"); // make JSON.parse fail
return resolve(result);
});
}).catch(err => {
console.log("Failed result: " + err);
});
}
также не сработал.
Третий способ;
function requestMarketData() {
return new Promise(function(resolve, reject) {
request(url, function(err, res, body) {
if (err) {
console.log(err);
return reject(err);
}
console.log("GET: " + url);
var result = [];
try {
result = JSON.parse("<HTML>"); // make JSON.parse fail
} catch(err) {
result = [{foo: "bar"}];
return reject(result);
}
return resolve(result);
});
});
}
Что, наконец, сработало.Тем не менее, мой вопрос, есть ли лучший способ обработки подобных ошибок вне реализации обещаний?
Большое спасибо!