收藏
回答

云开发使用云函数获取的数据还没返回,该数据就已经被使用,请问怎么解决?

问题描述:从函数中获取id_max, id_today两个数据,之后判断:如果id_max > id_today,那么total+=1;否则total不加分。

但是云函数还没有获取到这两个值呢,就已经判断过了:id_max>id_today

代码如下:

clickTap(event) {
 
  //调用云函数--获取该id对应的max_value
  let id_max = 0;
  wx.cloud.callFunction({
    name: 'getLimit',
    data: {
      id: id
    }
  }).then(res => {//res is returned from cloud
    console.log('getLimit-调用成功 and res is:', res);
    const result = res.result;
    const data = result.data || {}; //data为空
    id_max = data.data[0].data.max_value;
    console.log("id_max", id_max);
 
    if (result.code) {//code 非0, 表明出现错误
      console.log('getLimit-something wrong');
      wx.showToast({
        title: result.msg,
        icon: 'none'
      });
      return;
    }
    // wx.hideLoading();
  }).catch(err => {//调用云函数失败
    console.log('getLimit-调用失败', err);
    this.setData({
      statusMsg: 'getLimit-调用失败: ${err.errMsg}'
    });
    // wx.hideLoading();
  });
 
  //调用云函数,获取该id今日点击次数
  let today = new Date().setHours(0, 0, 0, 0);
  console.log("today: ", today);
  let id_today = 0;
  wx.cloud.callFunction({
    name: 'getToday',
    data: {
      id: id,
      stuId: app.globalData.stuId
    }
  }).then(res => {//res is returned from cloud
    console.log('getToday-调用成功 and res is:', res);
    const result = res.result;
    // const data = result.data || {}; //data为空
    id_today = result.data.total;
    console.log("id_today: ", id_today);
 
    if (result.code) {//code 非0, 表明出现错误
      console.log('getToday-something wrong');
      wx.showToast({
        title: result.msg,
        icon: 'none'
      });
      return;
    }
    //判断是否添加score
    if (id_max > id_today) {
       
      console.log("增加分数score");
 
      wx.cloud.callFunction({
        name: 'addScore',
        data: {
          stuId: app.globalData.stuId
        }
      }).then(res => {//res is returned from cloud
        console.log('addscore-调用成功 and res is:', res);
        const result = res.result;
        const data = result.data || {}; //data为空
        app.globalData.score += 1;
        that.setData({
          grade: app.globalData.score
        });
        if (result.code) {//code 非0, 表明出现错误
          console.log('addscore-something wrong');
          wx.showToast({
            title: result.msg,
            icon: 'none'
          });
          return;
        }
        // wx.hideLoading();
      }).catch(err => {//调用云函数失败
        console.log('addscore-调用失败', err);
        this.setData({
          statusMsg: 'addscore-调用失败: ${err.errMsg}'
        });
        // wx.hideLoading();
      });
    } else {
      console.log("已超限,不加分");
    }
 
    // wx.hideLoading();
  }).catch(err => {//调用云函数失败
    console.log('getToday-调用失败', err);
    this.setData({
      statusMsg: 'getToday-调用失败: ${err.errMsg}'
    });
    // wx.hideLoading();
  });
}


代码定位:


其中id_maxid_today都是云函数从数据库中获取的对应的id的值。

获取id_max的代码如下:


获取id_today的代码如下:


问题重述:就是在调用云函数获取数据库里面的id_maxid_today的时候,这俩值还没返回,就已经执行了后面(能用到这俩值)代码。

请问怎么解决?

非常感谢!!!

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

1 个回答

  • 吃包子不吐包子皮
    吃包子不吐包子皮
    2019-10-15

    两个获取的异步请求全部都完成后在执行比较 而不是任何一个完成后执行比较

    2019-10-15
    有用 1
    回复 1
    • tailor
      tailor
      2019-10-16
      明白,已解决!非常感谢
      2019-10-16
      回复
登录 后发表内容
问题标签