Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react/redux操作中从内部函数访问变量?_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 如何在react/redux操作中从内部函数访问变量?

Javascript 如何在react/redux操作中从内部函数访问变量?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,在getUnaddedPartItems函数中,我调用loadCartItems,但我需要访问.then函数中的常量addedItems。这一切都发生在我的购物车动作js文件中。有人能告诉我如何在内部函数中访问外部变量吗 export function loadCartItems() { return (dispatch, getState) => { dispatch({ type: types.LOAD_CART_PRODUCTS

在getUnaddedPartItems函数中,我调用loadCartItems,但我需要访问.then函数中的常量addedItems。这一切都发生在我的购物车动作js文件中。有人能告诉我如何在内部函数中访问外部变量吗

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()(dispatch, getState).then((result) => {
                    const cartItems = result.response.products;

                    const unaddedCartItems = addedItems.filter((addedItem) => {
                        return cartItems.find(cartItem => cartItem.id !== addedItem.productId);
                    });

                    return unaddedCartItems;
                }).catch(err => {
                    console.log('error: ', err);
                });
            }).catch(error => {
                console.log('error: ', error);
            });
        };
    }
尝试删除行开头的return关键字

return AsyncStorage.getItem(STORAGE_KEY_CART_ITEMS).then((result) => {
如果过早结束执行,则可能会阻止内部函数运行

还有,我看到你打电话来了

dispatch({
    type: types.GET_UNADDED_ITEMS
});
在活动开始时

但在其他任何地方,你都不会在事后采取行动。我认为您需要调度适当的操作,而不是在内部事件结束时返回未添加的部分

更新

替换

loadCartItems()(dispatch, getState).then((result) => {
    const cartItems = result.response.products;

    const unaddedCartItems = addedItems.filter((addedItem) => {
        return cartItems.find(cartItem => cartItem.id !== addedItem.productId);
    });

    return unaddedCartItems;
}).catch(err => {
    console.log('error: ', err);
});

使用dispatchloadCartItems可能有助于实现预期结果。在不发送的情况下调用它不会将它连接到内部使用的redux存储。然后,对于loadCartItems,内部函数始终可以访问外部函数中的变量。您所做的应该是有效的。addedItems在AsyncStorage调用中声明,但在loadCartItems函数的my filter方法中使用。但是,它不知道addedItems是什么,所以我得到了一个错误。你确定它看起来不错吗??可能是因为它在.then中使用?您能展示loadCartItems函数的代码吗?好的,我现在已经包括了它。我强烈建议您阅读javascript中的闭包和变量范围。大多数javascripts的强大功能来自于使用闭包作为状态变量共享机制。我在AsyncStorage.getItem调用之前放置了一个返回,因为在我的组件中,我附加了一个.then调用GetUnaddedPartItems函数。此外,我没有任何其他操作可调用,因此我只返回未添加的部分项,因为在我的组件中,我只希望返回数据。