收藏
回答

获取不到JS函数的返回值

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug js 客户端 6.7.3 2.3.0

请问各位大佬获取不到JS函数的返回值,请问如何解决,谢谢,下面是具体的代码:

1.函数:

queryCommentAmountByQId: function(qid, _question) {

    var that = this

    var amount = 0

    const db = wx.cloud.database()

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

        questionId: qid,

        }).get({

            success: res => {

                console.log(_question + ",查询评论数:" + res.data.length)//(2)

                amount = res.data.length

        }

    })

    return amount

    //这里返回的真实结果是4

},


2.调用函数:

var _comments_amount = that.queryCommentAmountByQId(res.data[i]._id, _question)

//这里调用后获得结果是0

console.log(_question+"评论数=" + _comments_amount) //(1)


3.调用后的结果:

(1)console.log(_question+"评论数=" + _comments_amount)

forum.js? [sm]:175 你知道哪些关于励志方面的诗词评论数=0



(2) console.log(_question + ",查询评论数:" + res.data.length)

forum.js? [sm]:212 你知道哪些关于励志方面的诗词,查询评论数:4


4.问题:

请问这样为什么获取到JS函数的返回值

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

1 个回答

  • 半寸灰
    半寸灰
    2018-11-04

    这是异步问题   因为    db.collection....没运行完毕  就返回了

    所以返回结果是0

    2018-11-04
    有用
    回复 9
    • 2018-11-04

      函数是可以得到正确结果的,但是在别的地方调用的时候获取不到这个返回值

      请问该怎么解决呢


      2018-11-04
      回复
    • 半寸灰
      半寸灰
      2018-11-04回复

      调用时加个回调



      queryCommentAmountByQId: function(qid, _question,suc) {

          var that = this

          var amount = 0

          const db = wx.cloud.database()

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

              questionId: qid,

              }).get({

                  success: res => {

                      console.log(_question + ",查询评论数:" + res.data.length)//(2)

                      amount = res.data.length

                      suc(amount);

              }

          })


          //这里返回的真实结果是4

      },





      调用

      that.queryCommentAmountByQId(res.data[i]._id, _question,function(amount){


      })



      或者用

      Promise

      麻烦点而已


      2018-11-04
      回复
    • 2018-11-04回复半寸灰

      您好,我是改成下面这样的,最后结果出来显示的是undefined,

      请问是哪里没有改对吗,谢谢

      函数:

      queryCommentAmountByQId: function (qid, _question, suc) {

          var that = this

          var amount = 0

          const db = wx.cloud.database()

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

              questionId: qid,

              }).get({

                  success: res => {

                      // console.log(_question + ",查询评论数:" + res.data.length)

                      amount = res.data.length

                      suc(amount);

                  }

          })

          // return amount

      },


      调用:

      var _comments_amount = that.queryCommentAmountByQId(res.data[i]._id, _question, function (amount) {

      })

      console.log(_question+"评论数=" + _comments_amount)


      结果:

      请写出含有“秋”的诗句评论数=undefined


      2018-11-04
      回复
    • 半寸灰
      半寸灰
      2018-11-05回复


      queryCommentAmountByQId: function (qid, _question, suc) {

          var that = this

          var amount = 0

          const db = wx.cloud.database()

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

              questionId: qid,

              }).get({

                  success: res => {

                      // console.log(_question + ",查询评论数:" + res.data.length)

                      amount = res.data.length

                      suc(amount);

                  }

          })

          // return amount

      },


      调用:

       that.queryCommentAmountByQId(res.data[i]._id, _question, function (amount) {

      console.log(_question+"评论数=" + _comments_amount)

      })





      2018-11-05
      回复
    • 2018-11-05回复半寸灰

      var _comments_amount = 0

      that.queryCommentAmountByQId(res.data[i]._id, _question, function (amount) {

          console.log(_question+"里面评论数=" + _comments_amount) //在函数里面可获取到值

          _comments_amount  = amount

      })

      console.log(_question+"外面评论数=" + _comments_amount) //在函数外面无法获取到值


      在这样回调之后,可以在这个函数里面获取到值,但是我是想将这个获取到的值赋给函数外的变量,因为函数外还有一些值,我的目的是将这个函数里面获取到的值和函数外面的那些值组合在一起放到一个数组里面,还有关键的一点是回调函数外面还有一个for循环

      2018-11-05
      回复
    查看更多(4)
登录 后发表内容