收藏
回答

从数据库获取数据调用回调函数问题

请问各位大佬,发送请求从数据库获取数据,由于异步加载,我使用了回调函数,但是回调函数只有在回调时获取数据成功的情况下才有返回值,而在没有成功的时候就没有任何反应了,请问这个怎么解决,谢谢!


isHasRegistered: function(openid, suc) {

    const db = wx.cloud.database()

    var register_id = ''

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

        _openid: openid

        }).get({

            success: res => {

                console.log('res.data[0]._id: ', res.data[0]._id)

                register_id = res.data[0]._id

                suc(openid, register_id)

// 获取到了数据是可以返回结果的,但是获取不到数据跳到fail之后,函数没有任何反应,应该如何返回一个值呢?

            },

            fail: err => {

                console.error('res.data[0]._id[数据库] [查询记录] 失败:', err)

// 获取到了数据是可以返回结果的,但是获取不到数据跳到fail之后,函数没有任何反应,应该如何返回一个值呢?

            }

    })

    // return _id == '' ? false : true;

},


或者说,在没有获取到数据后,根本就不执行任何语句了,程序没有任何反应了,就好像卡在这里回调函数里面了

请问这个应该怎么办呢?谢谢

感觉微信小程序的异步加载有点难搞啊

最后一次编辑于  2018-11-19
回答关注问题邀请回答
收藏

2 个回答

  • 唐全小程序
    唐全小程序
    2018-11-20

    如果没有查询到数据,也不会是failed,是success的。

    你的写法有问题,你可以判断res.data.length是不是非0,如果非0,再去获取_id


    你之所以说会失败,是因为为0的情况下,你获取了_id,发生了异常。


    2018-11-20
    赞同 1
    回复
  • ..
    ..
    2018-11-19

    可以用Promise风格试试

    一般查询不到数据会返回一个空数组


    isHasRegistered: function(openid, suc) {

        return new Promise((resolve,reject)=>{        

            const db = wx.cloud.database()

           var register_id = ''

            db.collection('yjjFamilyUsers').where({_openid: openid }).get()

            .then((msg)=>{

                resolve(msg);

            })

            .catch((err)=>{

                reject(err);            

            })

        })

        

    },


    2018-11-19
    赞同
    回复