मैं अपने कार्ट कार्यों में हूं और मैं उसी फ़ाइल के भीतर किसी अन्य फ़ंक्शन से 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);
        });
    };
}

enter image description here

0
FairyQueen 2 अप्रैल 2018, 19:36

2 जवाब

सबसे बढ़िया उत्तर

this.loadCartItems() कोई फंक्शन नहीं है। loadCartItems() है।

चूंकि वे एक सामान्य वर्ग/वस्तु/वस्तु में नहीं हैं, इसलिए this का उपयोग करने की कोई आवश्यकता नहीं है। यह मूल रूप से वैश्विक (उस फ़ाइल के संदर्भ में) की तरह कार्य करता है, इसलिए इसे सीधे कॉल करें।


इसे थोड़ा करीब से देखने पर ऐसा लगता है कि आप किसी एक्शन क्रिएटर के भीतर एक एक्शन क्रिएटर को कॉल करने की कोशिश कर रहे हैं। यह तुम्हारी समस्या है।

आम तौर पर, आप इन क्रियाओं को अपने घटक के भीतर मैप करते हैं, इसलिए यह आपके लिए dispatch बिट का ध्यान रखता है। हालाँकि, जब आप फ़ंक्शन को सीधे स्वयं कॉल कर रहे होते हैं, तो आपको स्वयं भी इससे निपटने की आवश्यकता होती है।

loadCartItems().then वह चीज है जो अब एक फ़ंक्शन नहीं है जिसे आपने this हटा दिया है। यह समझ में आता है, क्योंकि loadCartItems() वास्तव में एक फ़ंक्शन देता है, न कि Promise। फ़ंक्शन दो तर्क स्वीकार करता है: dispatch और getState

आपको इसे इस तरह कॉल करना होगा: loadCartItems()(dispatch, getState).then()

2
bennygenel 2 अप्रैल 2018, 17:11

loadItems और getUnaddedCartItems, दोनों धन्यवाद लौटाते हैं, वादे नहीं।

इसलिए उन्हें पहले भेजने की आवश्यकता है, ताकि वे आपके द्वारा अपेक्षित वादों को वापस कर दें।

वादा वापस करने से पहले वह प्रेषण कोड अनावश्यक प्रतीत होता है, इसलिए यदि आपको वास्तव में इसकी आवश्यकता नहीं है, तो बस कार्यों को वादे वापस कर दें।

0
Ryan H. 2 अप्रैल 2018, 17:10