第一层循环时,console.log中变量i就变成2了,为什么呀,怎么解决呢?
发布于 6 年前 作者 leilu 10722 次浏览 来自 官方Issues

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: ‘要先选中商品哦’,
      })
    }
  }

5 回复

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

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

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

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

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

回到顶部