context和promise.all的使用案例

217 阅读1分钟

context 就是当前的vuex实例对象;它拥有实例的所有方法

打印context可以发现context就是一个小仓库,commit[提交mutation修改state],getter[计算属性],dispatch[派发action],state[当前仓库数据]

截屏2022-04-15 上午9.07.46.png

本例使用为实现删除选中的商品,取context的getter,dispatch

在store的action中:

使用promise.all()函数,传入的数组是删除每个商品的结果,result是一个promise对象,通过promise.all()函数判断是否全部都删除成功。

 // 删除全部勾选的产品
    deleteAllCheckedCart({getters,dispatch}){
        // getters.cartList.cartInfoList获取购物车中所有产品,是一个数组
        let promiseAll= [];
        getters.cartList.cartInfoList.forEach(item => {
            // 返回的是promise对象
            let result = item.isChecked == 1? dispatch('deleteCartListBySkuId',item.skuId):'';
            // 将每一次返回的Promise对象添加到数组当中
            promiseAll.push(result);
        });
        // 只要全部的promise的对象都成功,返回结果为成功,有一个失败则返回失败
        return Promise.all(promiseAll);
    }

在vue组件的文件中删除选中的商品

//html样式
  <a @click="deleteAllCheckedCart">删除选中的商品</a>
//method中
async deleteAllCheckedCart(){
     try {
       // 派发一个action
      await this.$store.dispatch('deleteAllCheckedCart');
      this.getData();
     } catch (error) {}
    }