[英]Why is my react/redux function not returning a promise?
我在購物車中,正在從同一文件中的另一個函數調用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.log('Error retrieving cart products');
})
}).catch(err => {
console.log("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.log('error: ', error);
});
};
}
this.loadCartItems()
不是函數。 loadCartItems()
是。
由於它們不在通用的類/對象/事物中,因此無需使用this
。 它基本上像全局文件一樣工作(在該文件的上下文內),因此只需直接調用它即可。
仔細觀察一下,似乎您正在嘗試在動作創建者中調用動作創建者。 那是你的問題。
通常,您在組件中映射這些動作,因此它會為您處理dispatch
位。 但是,當您自己直接調用該函數時,也需要自己處理。
loadCartItems().then
,現在您已經刪除了this
, loadCartItems().then
是一個函數了。 這是有道理的,因為loadCartItems()
實際上返回一個函數,而不是Promise
。 該函數接受兩個參數: dispatch
和getState
。
您需要這樣稱呼: loadCartItems()(dispatch, getState).then()
。
實際上並沒有說loadCartItems()
不是函數
它說loadCartItems(...).then
不是一個函數。
實際上, loadCartItems(...).then
不是函數,因為該函數不會返回Promise
。 它返回另一個函數!
內部函數的任何返回值都可以用作分派本身的返回值。
因此,為了正確調用loadCartItems()
動作,您應該
dispatch(loadCartItems(anyParamYouWant)).then(...)
我建議您看一下redux-thunk
文檔,以幫助您更好地了解thunk的工作原理;)
loadItems
和getUnaddedCartItems
返回thunk ,而不是promises。
因此,需要首先調度它們,以便它們返回您期望的承諾。
在您返回承諾之前,該分派代碼似乎是不必要的,因此,如果您實際上不需要它,只需讓函數返回承諾即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.