请问各位大佬,发送请求从数据库获取数据,由于异步加载,我使用了回调函数,但是回调函数只有在回调时获取数据成功的情况下才有返回值,而在没有成功的时候就没有任何反应了,请问这个怎么解决,谢谢!
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;
},
或者说,在没有获取到数据后,根本就不执行任何语句了,程序没有任何反应了,就好像卡在这里回调函数里面了
请问这个应该怎么办呢?谢谢
感觉微信小程序的异步加载有点难搞啊
如果没有查询到数据,也不会是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);
})
})
},