收藏
回答

云开发,onload函数 页面加载时查询云数据 异步问题?

各位大佬新年好,我遇到如下问题,小程序云开发,页面加载时先查询云数据库数据,根据数据情况设置页面参数,现在不知道是不是异步问题,设置不了页面参数。

我的页面onload 函数如下:

  data: {

    allInfo: [],

    sakliwahinimStat:false,  //保存内容是否存在

    saklaptima:'none',   //表示已经保存了

    saklimaptima:'block',    //表示没保存

    shoucangAsarId:''       //当前页商品id

  },

 onLoad: function (options) {

    let that=this

    //获取asarid

    that.setData({shoucangAsarId:options.id})

    //根据options.id 查收藏状态

    that.shiFouShouCang(options.id)

    if(that.data.sakliwahinimStat==true){

      that.setData({

        saklaptima:'block',

        saklimaptima:'none'

      })

    }else{

      that.setData({

        saklaptima:'none',

        saklimaptima:'block'

      })

    }

云数据库判断函数:

 shiFouShouCang(asarId){

        //判断是否收藏,根据状态制定图标状态

        db.collection('sakliwahanlirim').where({

          asarId:asarId

        }).count().then(res=>{

          if(res.total>0){

            that.setData({sakliwahinimStat:true})

          }

          else{

            that.setData({sakliwahinimStat:false})

          }

        })

  },

我的想法是先从数据库里查询数据,然后设置页面状态,我这样有问题吗,帮我看看,谢谢


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

4 个回答

  • Mr.Zhao
    Mr.Zhao
    2021-02-14

    就是异步问题,用async await

    2021-02-14
    有用 1
    回复 12
    • Cherish every day
      Cherish every day
      发表于移动端
      2021-02-14
      onload 用异步有特殊要求吗,还是
      2021-02-14
      1
      回复
    • Mr.Zhao
      Mr.Zhao
      2021-02-14回复Cherish every day
      你想说啥啊
      2021-02-14
      1
      回复
    • Cherish every day
      Cherish every day
      发表于移动端
      2021-02-14回复Mr.Zhao
      我用过async await,但是用到onload 函数上报错了,我想说onload 上有没有特殊要求,有没有实例,谢谢
      2021-02-14
      回复
    • Mr.Zhao
      Mr.Zhao
      2021-02-14回复Cherish every day
      我看看你咋写的,怎么个报错,写了也得写对啊
      2021-02-14
      回复
    • Cherish every day
      Cherish every day
      2021-02-14回复Mr.Zhao
      帮我看看,麻烦了
      2021-02-14
      回复
    查看更多(7)
  • Cherish every day
    Cherish every day
    2021-02-14

    onLoad: function (options) {

         console.log('1--onload jiazai')

        //获取asarid

        this.setData({shoucangAsarId:options.id})

        //判断是否收藏,根据状态制定图标状态

        this.checkFuc();

        console.log('6--'+this.data.sakliwahinimStat)

        if(this.data.sakliwahinimStat==true){

          console.log('7--'+this.data.sakliwahinimStat)

          this.setData({

            saklaptima:'block',

            saklimaptima:'none'

          })

        }else{

          console.log('8--'+this.data.sakliwahinimStat)

          this.setData({

            saklaptima:'none',

            saklimaptima:'block'

          })

        }

    ----------------------
          async checkFuc(){
        console.log('2--checkFuc jiazai')
        const do1=await this.shiFouShouCang(this.data.shoucangAsarId)
        console.log('5--'+this.data.sakliwahinimStat)
      },
        ---------------------
           shiFouShouCang(asarId){
        db.collection('sakliwahanlirim').where({
          asarId:asarId
        }).count().then(res=>{
          if(res.total>0){
            console.log('3--'+res.total)
            this.setData({sakliwahinimStat:true})
            console.log('4--'+this.data.sakliwahinimStat)
          }
          else{
            this.setData({sakliwahinimStat:false})
          }
        })
      },
        ------------------------
        结果
     1--onload jiazai
     2--checkFuc jiazai
     6--false
     8--false
     5--false
     undefined
     3--2
     4--true
    这运行顺序也搞不懂
    


    2021-02-14
    有用
    回复
  • 跨商通
    跨商通
    2021-02-14

    不一定非要将异步改成同步,异步就不能渲染页面了吗?

    你将渲染代码写在异步回调里就行了。

    2021-02-14
    有用
    回复
  • Vinlic
    Vinlic
    2021-02-14

    问题是你这里面没有调用云函数,数据库查询是放在云函数里的

    2021-02-14
    有用
    回复
登录 后发表内容
问题标签