async和await的使用

//加入购物车
async addShopcar() {
   //1:在点击加入购物车这个按钮的时候,做的第一件事情,将参数带给服务器(发请求),通知服务器加入购车的产品是谁
   //this.$store.dispatch('addOrUpdateShopCart'),说白了,它是在调用vuex仓库中的这个addOrUpdateShopCart函数。
   // 这个dispatch派发请求返回的结果就是一个Promise(即便派发的函数没有使用async)
   //2:你需要知道这次请求成功还是失败,如果成功进行路由跳转,如果失败,需要给用户提示
   try { // 这里的try-catch只有在使用await一个Promise,这个Promise状态是reject时,才会被catch住
     //成功
     await this.$store.dispatch("addOrUpdateShopCart", { // dispatch调用返回的也是个Promise
       skuId: this.$route.params.skuid,
       skuNum: this.skuNum,
     });
     //3:进行路由跳转
     //4:在路由跳转的时候还需要将产品的信息带给下一级的路由组件
     //一些简单的数据skuNum,通过query形式给路由组件传递过去
     //产品信息的数据【比较复杂:skuInfo】,通过会话存储(不持久化,会话结束数据在消失)
     //本地存储|会话存储,一般存储的是字符串
     sessionStorage.setItem("SKUINFO",JSON.stringify(this.skuInfo));
     this.$router.push({name:'addcartsuccess',query:{skuNum:this.skuNum}});
   } catch (error) {
     //失败
     alert(error.message);
   }

//加入购物车的||修改某一个产品的个数
async addOrUpdateShopCart({ commit }, { skuId, skuNum }) {
  //发请求:前端带一些参数给服务器【需要存储这些数据】,存储成功了,没有给返回数据
  //不需要在三连环(仓库存储数据了)
  //注意:async函数执行返回的结果一定是一个promise【要么成功,要么失败】
  let result = await reqAddOrUpdateShopCart(skuId, skuNum);
  if (result.code == 200) {
    //返回的是成功的标记(返回一个不为空的字符串,即为成功)
    return "ok";
  } else {
    //返回的是失败的标记
    return Promise.reject(new Error("faile"));
  }
},

//获取产品信息的action
async getGoodInfo({ commit }, skuId) {
  // 1、axios请求返回的是一个promise,
  // 2、当函数使用async修饰之后,await后面的Promise返回结果之后,才会继续执行它下面的代码(异步执行)
  //    ,并且await一个Promise会从Promise中拿到返回的结果,即下面的result就不是Promise了,而如果没有使用await的话,那reqGoodsInfo就是返回一个Promise对象
  // 3、async修饰的函数返回值一定是个Promise
  // 4、async和await必须同时使用,否则会报错
  let result = await reqGoodsInfo(skuId); 
  if (result.code == 200) {
    commit("GETGOODINFO", result.data);
  }
},
<!DOCTYPE html>
<html>
  <head></head>
  <body></body>
  <script>
    function test() {
      return new Promise((resolve, reject) => {
        console.log('p')
        resolve("r");
        console.log('already exec...')
      });
    }

    async function test2() {
        let j = await test();
        console.log(j,'j')
    }

    test2();
    console.log("end");
  </script>
</html>
<!--
p
already exec...
end
r j
-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值