У меня есть вспомогательная функция:
function httpRequestHelper(body) {
return fetch(`${host}:${port}`, {
method: 'post',
body: JSON.stringify(body)
})
.then(function (response) {
if (!response.ok) {
throw Error(response.statusText);
}
return response.json();
})
.then(function(response) {
if (response.type === 'error') {
throw Error(response);
}
return response;
})
.catch(function(error) {
return error;
});
}
, которую я написал для краткости функций для различных команд.Эти функции просто указывают тело для отправки и какая часть ответа имеет отношение к потребителю:
function hasActiveProject() {
return httpRequestHelper({ type: 'request', cmd: 'has_active_project' })
.then(function (response) {
return response.payload.value;
})
}
Я выполняю различные команды следующим образом:
try {
let hasActiveProjectResponse = await otii.hasActiveProject()
console.log(hasActiveProjectResponse);
} catch (error) {
console.log(error);
}
Теперь проблемаявляется то, что в функции catch я ожидал бы получить сообщение об ошибке, но вместо этого я получаю сообщения об ошибках, такие как:
TypeError: Cannot read property 'value' of undefined
Это потому, что hasActiveProject()
пытается извлечь соответствующий ответ, даже когда былошибка, которая вызывает другую ошибку, которая возвращается в мой обработчик catch (error).
Как я могу переписать это так, чтобы
hasActiveProject()
оставался тонким - Обработчик перехвата получает исходную ошибку