Я получил следующую функцию, но когда она обнаружила ошибку, она не пошла, чтобы поймать, она просто пошла прямо к ней. Обратите внимание, что это сработало, я просто пытался заставить уловку
const AddMainItem = HPSMainObject => {
let data = JSON.stringify(HPSMainObject);
const request = axios({
method: "POST",
url: getMainUrl(
"web/lists/GetByTitle('" +
MAINITEMGENERALINFO.mainItemRelatedObject.mainList.title +
"')/Items"
),
data: data,
headers: INTERNALCONFIG.PostHeader
});
return request.then(result => result.data.d).catch(error => error);
};
Я позвонил, используя это, вы можете посоветовать, что лучше всего?
handleSubmit = () => {
let self = this;
AddMainItem(self.state.HPSMainObject)
.then(function(AddMainItemResult) {
console.info("its working");
})
.catch(function(errorMessage) {
console.info("Error AddMainItem: ", errorMessage);
});
}
Эта строка:
.catch(error => error)
... преобразует отклоненные обещания в обещания, устраняющие ошибку. Это эквивалент выполнения этого в синхронном коде:
try {
doSomething();
} catch (error) {
return error; // The function is no-longer throwing
}
Похоже, вы хотите:
.catch(error => { throw error; })
... но это лишнее. Просто опустите ловушку, и catch
вызывающего абонента сработает.
Да все верно. Либо так, либо убедитесь, что вы перебросили после ловли.
Спасибо, что указали на мою ошибку! Не знаю, как я забыл, что он продолжает возвращать цепочку обещаний.
Спасибо. но просто вопрос, а что, если я хочу, чтобы одна вызывающая функция (handleSubmit) получала сообщение об ошибке?
Поскольку я планирую вызвать другую функцию, когда эта функция получит ошибку
Вы можете выдать новую ошибку: .catch(error => { throw new Error('Some custom message'); })
, если вы имеете в виду, что хотите обернуть ошибку чем-то, имеющим более понятное сообщение об ошибке.
Просто чтобы быть уверенным, что я правильно понял, когда вы говорите опускать ловушку, вы имеете в виду, что я просто удаляю ловушку в своей функции handleSubmit и сохраняю ошибку .error в AddMainItem?