我正在尝试在React Native上制作一个持久的购物车。如果您仅添加了一项,则可以使用,但是如果添加了另一项,则所有项都将与添加的最后一项相同。我将其范围缩小到我们的getData()函数,该函数返回我们渲染的产品的数据。
async getData(cartItems){
let promises = []
cartItems.forEach(item => {
promises.push(productInfo(item.id))
})
return Promise.all(promises)
}
productInfo()看起来像这样。
export function productInfo(product_id){
vapeBluntPOST.url = baseUrl+'/api/productinfo'
vapeBluntPOST.data.id = product_id
return axios(vapeBluntPOST).then(({data})=>(data))
}
问题似乎是Promise.all()返回的数组元素都与对应于最后一个promise的最后一个解析值相同。
答案 0 :(得分:0)
问题出在vapeBluntPOST
上,而productInfo
不在本地范围内。因此,当promise解析时,它们都使用了最后一次调用中的值,而最后一次调用来自数组中的最后一个id。
假设您实际上在其他地方不需要该对象,简单的解决方法是仅使用局部变量:
export function productInfo(product_id){
const vapeBluntPOST = { /* common configuration that you need */};
vapeBluntPOST.url = baseUrl+'/api/productinfo'
vapeBluntPOST.data.id = product_id
return axios(vapeBluntPOST).then(({data})=>(data))
}