收藏
回答

调用4次函数,但是他没有更新数据,并且运行顺序好奇怪,没按代码顺序执行,为什么?

 var id1 = null;

    var num1 = null

    for(var i=0;i<=3;i++){

      console.log('开始运行第'+i+'次')

      wx.cloud.callFunction({

        name:"xiugai",

        data:{

          name:"123456"

        },

        success(res){

          console.log('第'+i+'次查询还没更新的数据为:'+res.result.data[0].k16)

          num1 = res.result.data[0].k16

          id1 = res.result.data[0]._id

        }

      })

      wx.cloud.callFunction({

        name:"gai",

        data:{

          id:id1,

          num:num1+1

        },

        success:function(res){

          console.log('更新完毕')

        },

        fail:function(res){

          console.log('更新失败')

        }

      })

    }  

为什么结果是这样,不应该是先输出开始运行第0次,然后查询数据,再更新数据,重复4次吗,为什么会一开始还没查询数据的时候就先输出了4次开始运行,并且数据也没有被更新,请大佬指点一下

回答关注问题邀请回答
收藏

2 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-07-27

    去了解一下async / await 、Promise

    var id1 = null;
    var num1 = null
    var ps = []
    for(var i=0;i<=3;i++){
      ps.push((function(i){
          return new Promise(async (rs, rj)=>{
        console.log('开始运行第'+i+'次')
        var res = await wx.cloud.callFunction({
          name:"xiugai",
          data:{
            name:"123456"
          }
        })
            num1 = res.result.data[0].k16
            id1 = res.result.data[0]._id
            console.log('第'+i+'次查询还没更新的数据为:', num1)
        await wx.cloud.callFunction({
          name:"gai",
          data:{
            id:id1,
            num:num1+1
          },
          success(res){
            rs(res)
          },
          fail(res){
            rj(res)
          }
        })
        })
        })(i))
        ps.length && Promise.all(ps).then(res=>{
            console.log('更新完毕', res)
        }).catch(e=>{
            console.log('更新失败', res)
        })
    }
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2020-07-27
    有用 1
    回复 1
    • 心贤
      心贤
      2020-07-27
      谢了
      2020-07-27
      回复
  • 想想爱酱会怎么说
    想想爱酱会怎么说
    2020-07-27

    异步

    2020-07-27
    有用
    回复
登录 后发表内容
问题标签