收藏
回答

第一层循环时,console.log中变量i就变成2了,为什么呀,怎么解决呢?

onUpdate: function (e) {
    var orderInfoList = this.data.orderInfoList;
    var checked = true;
    for(var i=0; i<orderInfoList.length; i++) {
      if (orderInfoList[i].selected) {
        if (orderInfoList[i].orderSize > orderInfoList[i].stockQuantity) {
          wx.showToast({
            icon: "none",
            title: '商品库存数量不足哦',
          })
        }
        wx.cloud.callFunction({
          name: 'updateOrderByOrderID',
          data: {
            orderID: orderInfoList[i].orderID
          }
        }).then(async function (res){
          // 商品表 库存数-订单数
          console.log(orderInfoList[i].productID + "商品表 库存数-订单数")
          wx.cloud.callFunction({
            name: 'updateProductByID',
            data: {
              productID: orderInfoList[i].productID,
              // 库存数 - 订单数
              stockQuantity: orderInfoList[i].stockQuantity - orderInfoList[i].orderSize,
            }
          }).then(res =>{
            wx.navigateTo({
              url: '../order'
            })
          }).catch(err =>{
            wx.showToast({
              icon: "none",
              title: '更新商品表失败',
            })
          })
        }).catch(err =>{
          wx.showToast({
            icon: "none",
            title: '更新订单表失败',
          })
        }) 
        checked = false;
      }
    }
    if (checked) {
      wx.showToast({
        icon: "none",
        title: '要先选中商品哦',
      })
    }
  }

最后一次编辑于  11-26
回答关注问题邀请回答
收藏

5 个回答

  • Mr.马
    Mr.马
    11-26

    看下js的闭包循环问题; 将var i= 1;=》let i= 1


    11-26
    赞同 2
    回复 1
    • 大灰狼
      大灰狼
      11-26
      太nb了,成功了,我还以为时同步异步的问题
      11-26
      回复
  • 👀
    👀
    11-26

    宏任务跑完才跑微任务,所以肯定是for全部跑完才进入promise的回调,所以在回调里拿到的i的值就一直是i跳出for循环那一刻的值

    11-26
    赞同
    回复
  • 菱玉
    菱玉
    11-26

    你可以加一个断点跟踪调试看看

    11-26
    赞同
    回复
  • 就在那里
    就在那里
    11-26

    if条件没满足,满足的时候已经不是第一次了吧

    11-26
    赞同
    回复
  • 王志鹏
    王志鹏
    11-26

    没太看懂你的问题  能说详细点吗?


    11-26
    赞同
    回复 3
    • 大灰狼
      大灰狼
      11-26
      当第一次循环在进行到console.log时,这当中的i变量值却变成了2,我怀疑时同步异步的问题
      11-26
      回复
    • 大灰狼
      大灰狼
      11-26回复大灰狼
      导致出现Cannot read property 'productID' of undefined这种错误
      11-26
      回复
    • 王志鹏
      王志鹏
      11-26回复大灰狼
      不是的  这个是前面的循环不满足条件没进入后面的函数,你在多打印一下i  就可以看见
      11-26
      回复
问题标签