Я все еще очень плохо знаком с Аксиосом и обещаниями. Я близок к пониманию этого, но я знаю, что делаю некоторые вещи неправильно. У меня есть метод JavaScript, который должен вернуть обещание. Внутри этого метода у меня есть сообщение Axios с двумя .then
методами. Если мой первоначальный пост не удался, я получаю эту уродливую ошибку в консоли: Unhandled promise rejection ReferenceError: "reject is not defined"
. У меня такое чувство, что я не должен вкладывать .catch
методы, как я. Я думаю, что это должно быть просто post.then.then.catch
.
Кроме того, кто-нибудь может понять, почему я не получаю itemInformation, отправляемую обратно в response
во втором .then
?
Вот соответствующий код Javascript (сначала вызывается метод addToCartVue
):
addToCartVue(itemData) {
let vm = this;
return new Promise((resolve, reject) => {
vm.buildDataString(itemData);
axios.post(POST_ENDPOINT, {
data: vm.dataString
},
{
/*headers: {
"Content-Type": "application/x-www-form-urlencoded"
}*/
}).then(response => {
return vm.updateCartInfo(vm.dataString, itemData.addToCartParameters.itemId, vm.selectedStoreId, vm.quantity);
}).then(response => {
if (itemData.addToCartParameters.showLB) {
vm.emitGlobalEvent('addToCart::open', itemData);
resolve(response);
}
}).catch(error => reject(error));
}).catch(error => reject(error));
}, // end of addToCartVue method
buildDataString(itemData) {
// irrelevant code that builds quantity and dataString variables
vm.quantity = quantity;
vm.dataString = dataString;
}, // end of buildDataString method
updateCartInfo(dataString, itemId, selectedStore, quantity) {
axios.get(GET_ENDPOINT, {
params: {
data: dataString
}
}).then(response => {
cartDropDown.populateCartDropDown(response);
const addedItem = response.addedItem;
const basketInfo = response.basketInfo;
let productQuantity = quantity;
if (addedItem.quantity > -1) {
productQuantity = addedItem.quantity;
}
const itemInformation = {
"itemId": itemId,
"selectedStore": selectedStore,
"addedItem": addedItem,
"basketInfo": basketInfo,
"displayValues": null,
"quantity": productQuantity,
"isCustomProduct": false
};
return itemInformation;
}).catch(err => error => reject(error));
} // end of updateCartInfo method