Javascript 如何在react/redux操作中从内部函数访问变量?
在getUnaddedPartItems函数中,我调用loadCartItems,但我需要访问.then函数中的常量addedItems。这一切都发生在我的购物车动作js文件中。有人能告诉我如何在内部函数中访问外部变量吗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
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函数。此外,我没有任何其他操作可调用,因此我只返回未添加的部分项,因为在我的组件中,我只希望返回数据。