簡體   English   中英

為什么我的react / redux函數沒有返回承諾?

[英]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 ,現在您已經刪除了thisloadCartItems().then是一個函數了。 這是有道理的,因為loadCartItems()實際上返回一個函數,而不是Promise 該函數接受兩個參數: dispatchgetState

您需要這樣稱呼: loadCartItems()(dispatch, getState).then()

實際上並沒有說loadCartItems()不是函數

它說loadCartItems(...).then不是一個函數。

這是什么意思?

實際上, loadCartItems(...).then不是函數,因為該函數不會返回Promise 它返回另一個函數!

如在redux-thunk docs中所述

內部函數的任何返回值都可以用作分派本身的返回值。

因此,為了正確調用loadCartItems()動作,您應該

dispatch(loadCartItems(anyParamYouWant)).then(...)

我建議您看一下redux-thunk文檔,以幫助您更好地了解thunk的工作原理;)

loadItemsgetUnaddedCartItems返回thunk ,而不是promises。

因此,需要首先調度它們,以便它們返回您期望的承諾。

在您返回承諾之前,該分派代碼似乎是不必要的,因此,如果您實際上不需要它,只需讓函數返回承諾即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM