从数据库获取数据调用回调函数问题
发布于 6 年前 作者 mqiu 3339 次浏览 来自 问答

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

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;

},

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

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

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

2 回复

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

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

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

可以用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);            

        })

    })

    

},

回到顶部