Я нахожусь в действиях своей тележки и вызываю loadCartItems () из другой функции в том же файле. Однако эта функция не возвращает обещание или какие-либо данные, и я не знаю почему. Моя функция loadCartItems () на самом деле даже не рассматривается как функция. Кто-нибудь знает, почему это может быть?
export function loadCartItems() {
return (dispatch, getState) => {
dispatch({
type: types.LOAD_CART_PRODUCTS
});
return AsyncStorage.getItem(STORAGE_KEY_JWT_TOKEN).then((key) => {
return API.getCartItems(key)
.then((response) => {
return dispatch({
type: types.LOAD_CART_PRODUCTS_SUCCESS,
response
});
}).catch(err => {
console.info('Error retrieving cart products');
})
}).catch(err => {
console.info("Error retrieving cart items from local storage");
});
};
}
export function getUnaddedCartItems() {
return (dispatch, getState) => {
dispatch({
type: types.GET_UNADDED_ITEMS
});
return AsyncStorage.getItem(STORAGE_KEY_CART_ITEMS).then((result) => {
const addedItems = JSON.parse(result);
loadCartItems()
.then((result) => {
const cartItems = result.response.products;
if (this.state.unaddedCartItems.length === 0) {
const unaddedCartItems = addedItems.filter((addedItem) => {
return cartItems.find(cartItem => cartItem.id !== addedItem.productId);
});
}
}).catch(err => {
consoel.log('error: ', err);
});
}).catch(error => {
console.info('error: ', error);
});
};
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


this.loadCartItems() - это не функция. loadCartItems() есть.
Поскольку они не входят в общий класс / объект / что-то, нет необходимости использовать this. Он в основном действует как глобальный (в контексте этого файла), поэтому просто вызывайте его напрямую.
Если присмотреться к нему поближе, похоже, что вы пытаетесь вызвать создателя действия внутри создателя действия. Это твоя проблема.
Обычно вы сопоставляете эти действия в своем компоненте, поэтому бит dispatch позаботится за вас. Однако, когда вы вызываете функцию непосредственно сами, вам также нужно иметь дело с ней самостоятельно.
loadCartItems().then - это то, что не работает сейчас, когда вы удалили this. В этом есть смысл, поскольку loadCartItems() фактически возвращает функцию, а не Promise. Функция принимает два аргумента: dispatch и getState.
Называть его нужно так: loadCartItems()(dispatch, getState).then().
На самом деле это не говорит о том, что loadCartItems() не является функцией
В нем говорится, что loadCartItems(...).then не является функцией.
Фактически, loadCartItems(...).then не является функцией, потому что функция не возвращает Promise. Возвращает другая функция!
Как указано в redux-thunk документы:
Any return value from the inner function will be available as the return value of dispatch itself.
Итак, чтобы правильно вызвать действие loadCartItems(), вы должны сделать
dispatch(loadCartItems(anyParamYouWant)).then(...)
Я бы порекомендовал вам взглянуть на документацию redux-thunk, чтобы помочь вам лучше понять, как работают преобразователи;)
И loadItems, и getUnaddedCartItems возвращают thunks, а не обещания.
Поэтому они должны быть отправлены в первую очередь, чтобы они вернули обещания, которые вы ожидаете.
Этот код отправки перед возвратом обещания кажется ненужным, поэтому, если он вам действительно не нужен, просто пусть функции возвращают обещания.
Хорошо, я только что обновил свой вопрос. Я пробовал использовать его без «этого». перед loadCartItems (), но он по-прежнему говорит, что это не функция. Почему??