小程序
小游戏
企业微信
微信支付
扫描小程序码分享
async await 异步转同步为什么没有实现?
代码截图,预期是数据库操作执行完后 打印日志,但实际总是先打印日志,求指点,(其中数据库中的操作比较复杂,有3张表的联表查询,但这个应该和异步转同步没啥关系吧)
数据库的操作
5 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
getData: function(){ return new Promise(async (rs, rj)=>{ ... await db.collection('xxxx').where(...).get().then(res=>{ ... rs({ 最后需要返回的数据 }) }).catch(e=>{ rj({ 异常时返回的内容 }) }) }) }
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
await db.collection("..").where(...).get().then(res=>{
这段代码,如果是自定义的函数呢,不是微信小程序自带的函数。应如何去写
加个套试下
await后面加个 new Promise 单步调试下
建议先写个最简单的脚本调试await,以确定是await的原因,还是你的脚本的原因。
let res = await db.collection(...).doc(...).get()
console.log(res)
getData: async function() {
let arry_share_record = new Array()
let arry_share_record_title = new Array()
let arry_share_record_process = new Array()
let arry_share_record1 = new Array()
let that = this;
let arry_length
// await new Promise((resolve, reject) => {
//第一次加载数据
if (currentPage == 1) {
this.setData({
loadMore: true, //把"上拉加载"的变量设为true,显示
loadAll: false //把“没有数据”设为false,隐藏
})
}
const db = wx.cloud.database({
env: cur_env
//查询分享记录
await db.collection('process_information_col').where({
process_chain: db.RegExp({
regexp: user_openid,
options: 'i'
loadMore: false //把"上拉加载"的变量设为false,显示
});
if (arry_share_record1.length < pageSize) {
that.setData({
loadMore: false, //隐藏加载中。。
loadAll: true //所有数据都加载完了
} else {
loadAll: true, //把“没有数据”设为true,显示
loadMore: false //把"上拉加载"的变量设为false,隐藏
// }, 1000) //延迟时间
}).catch(err => {
console.log('[数据库release_content_col] [查询记录] 失败:', err)
loadAll: false,
loadMore: false
// }, 100) //延迟时间
}).catch(err => { console.log('[数据库:solution_content_col] [查询记录] 失败:', err) })
}).catch(err => { console.log('[数据库:process_information_col] [查询记录] 失败:', err) })
console.log('arry_share_record1========================:')
await的方法套个 new Promise 试下
await new Promise((res, rej) => {
//异步代码
return res()
关注,学下下,等大佬入场
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
getData: function(){ return new Promise(async (rs, rj)=>{ ... await db.collection('xxxx').where(...).get().then(res=>{ ... rs({ 最后需要返回的数据 }) }).catch(e=>{ rj({ 异常时返回的内容 }) }) }) }
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
await db.collection("..").where(...).get().then(res=>{
这段代码,如果是自定义的函数呢,不是微信小程序自带的函数。应如何去写
加个套试下
await后面加个 new Promise 单步调试下
建议先写个最简单的脚本调试await,以确定是await的原因,还是你的脚本的原因。
let res = await db.collection(...).doc(...).get()
console.log(res)
getData: async function() {
let arry_share_record = new Array()
let arry_share_record_title = new Array()
let arry_share_record_process = new Array()
let arry_share_record1 = new Array()
let that = this;
let arry_length
// await new Promise((resolve, reject) => {
//第一次加载数据
if (currentPage == 1) {
this.setData({
loadMore: true, //把"上拉加载"的变量设为true,显示
loadAll: false //把“没有数据”设为false,隐藏
})
}
const db = wx.cloud.database({
env: cur_env
})
//查询分享记录
await db.collection('process_information_col').where({
process_chain: db.RegExp({
regexp: user_openid,
options: 'i'
})
})
loadMore: false //把"上拉加载"的变量设为false,显示
});
if (arry_share_record1.length < pageSize) {
that.setData({
loadMore: false, //隐藏加载中。。
loadAll: true //所有数据都加载完了
});
}
} else {
that.setData({
loadAll: true, //把“没有数据”设为true,显示
loadMore: false //把"上拉加载"的变量设为false,隐藏
});
}
// }, 1000) //延迟时间
}
}).catch(err => {
console.log('[数据库release_content_col] [查询记录] 失败:', err)
that.setData({
loadAll: false,
loadMore: false
});
})
// }, 100) //延迟时间
}).catch(err => { console.log('[数据库:solution_content_col] [查询记录] 失败:', err) })
}
}).catch(err => { console.log('[数据库:process_information_col] [查询记录] 失败:', err) })
console.log('arry_share_record1========================:')
}
首先,云开发函数本身就是支持promise的,没必要再promisify了;
其次,一般await是这样使用;let res = await ....,没有再then了,没有await的时候才then,你的这种用户,其中有没有问题,我也没验证过。建议改成我说的这样试试。
await的方法套个 new Promise 试下
await new Promise((res, rej) => {
//异步代码
return res()
})
关注,学下下,等大佬入场