收藏
回答

小程序的代码执行顺序问题?

想实现如下功能:

用户测试结果会保存在云数据库中,但是如果该用户的测试结果大于N条,就从前删除最老的那条。

出现的问题是:Part 1部分的程序执行顺序好像是晚于Part 2部分的代码(至少应该是同时运行的?)。因为我看程序的数据打印顺序,总是先打印了Part 2,然后再打印Part 1的num。

这造成的结果就是那个if语句的判断形同虚设… 不论num统计出来的数量是多少,总会先执行添加数据的部分(因为函数里初始化num=0,所以会直接进入到添加数据的程序里)。

不知道这个问题应该怎么解决?这个问题是不是牵涉到了小程序的同步/异步执行问题呢?

.js文件中写的代码大致如下(else下的删除数据的逻辑未写完):

danshen:function(){
    var num = 0 // 初始化num
    var id_danshen = "XXXX"
    this.setData({
      id_danshen:"XXXX"
    });

    // Part 1  使用云函数count统计数据的数量
    wx.cloud.callFunction({
      name:'count',
      success:res=>{
        var num = res.result.total
        console.log(num)
      }
    })
    // Part 2 如果数量小于等于10,则添加数据
    if (num<=10){
      var date = new Date();
      db.collection('userInfo').add({
        data:{
          result: id_danshen,
          posttime: date.getSeconds(),
        },
        success:res=>{
          console.log(res);
        }
      })
    }
    // Part 3 如果数量大于10,则删除最老的数据(未写完)
    else{
      db.collection('userInfo').remove()
    }
    
  },
回答关注问题邀请回答
收藏

5 个回答

  • ⅴ
    2023-03-22

    建议百度一下JS异步问题。

    把你的if逻辑写在这个success的回调里。

    2023-03-22
    有用 1
    回复
  • 一
    2023-03-24

    判断放成功回调里面

    2023-03-24
    有用
    回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2023-03-23

    是你写的代码有问题,不是的程序执行有问题

    2023-03-23
    有用
    回复 2
    • 景霖
      景霖
      2023-03-23
      我知道是自己程序上的问题啊,所以我不是在发贴子问吗?我也想了解小程序的执行机制啊。
      2023-03-23
      回复
    • 那一抹笑😃 穿透阳光
      那一抹笑😃 穿透阳光
      2023-03-24回复景霖
      JS是异步执行的,把判断放在赋值的位置
      2023-03-24
      回复
  • 拾忆
    拾忆
    2023-03-22

    JS是异步执行的,利用async/await来解决(具体自行百度),或者把下一步执行代码放在上一步的success里面。

    2023-03-22
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    2023-03-22

    这是js同步异步 社区高频问题 不学不行

    2023-03-22
    有用
    回复
登录 后发表内容