vuex 获取购物车 问题

因为从后端获取到购物车数据只有商品id,所以商品信息还得通过action 异步获取,那么问题出现了,

// 获得购物车
[GET_CART] ({ dispatch, commit }) {
    return new Promise((resolve, reject) => {
      api.apiObj.cart.get()
          .then((res) => {
            if (res.status) {
              let data = res.data
              commit('SET_CART', data)
              // resolve(data)
              data.forEach((item) => {
                dispatch('GET_GOODS', item)
              })
            } else {
              Message.error(res.msg)
            }
          })
    })
  },
  // 获得商品信息
  [GET_GOODS] ({ commit }, data) {
    debugger
    api.apiObj.getPro.get({
      id: data.id
    }).then((res) => {
      if (res.status) {
        console.log(res.data[0])
        // 这里打印没问题 2个不同的商品信息
        commit('SET_GOODS', res.data[0])
      }
    })
  }
[SET_GOODS] (state, data) {
    //问题就在这里 传过来的商品信息是全最后一个,也就是都是id为3的商品信息,我知道这是异步造成的,但是该怎么解决呢
    state.cart.forEach((item, i) => {
      // debugger
      if (item.id === data.id) {
        state.cart[i].goods = data
      }
    })
  }

图片描述

所以最后结果只有id为3的商品信息放进去了
所以最后结果只有id为3的商品信息放进去了

阅读 3.1k
1 个回答

state.cart[i].goods如果是数组,可以通过push,你那样做只能保存最后一组数据。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进