为什么代码执行不是按顺序的啊,这就是解释语言,执行慢的晚输出啊!如果想要按顺序来执行怎么弄啊?
预计:
写入数据1
循环1
写入数据2
循环2
写入数据3
循环3
。。。
实际是:
循环1
循环2
循环3
。。。
写入数据11
写入数据11
写入数据11
。。。
aaa=1
db_total=10
console.log('1111总数1111: ', db_total)
while (aaa <= db_total) {
this.data.markers.push({latitude: 0,longitude: 0,}),
db.collection('wy_gcb').where({ t0: aaa }).get({
success: res => {this.setData({'markers[2].longitude': res.data[0].t4})
console.log('写入数据', aaa)
},})
console.log('循环: ', aaa)
aaa++;
}
Promise 风格 了解一下
await db.collection(
'wy_gcb'
).where({t0: aaa}).get({
success: (res) => {
this
.setData({
'markers[2].longitude'
: res.data[0].t4})
console.log(
'写入数据'
, aaa)
}
})
直接加个await 就可以了吗?
你先试试看,云函数我没使用过,不过通过文档内容看,理论上是这样的。
直接加个await 编译提示unknown: await is a reserved word (63:8) 错误啊
能提供完整代码么
const app = getApp()
Page({
data: {
markers: [
{
id: 0,
latitude: 23.099994,
longitude: 113.324520,
label: {
content: '我是这个气泡',
fontSize: 14,
color: '#ffffff',
bgColor: '#000000',
padding: 8,
borderRadius: 4,
boxShadow: '4px 8px 16px 0 rgba(0)'
},
},
{
id: 1,
latitude: 23.199994,
longitude: 113.424520,
label: { content: "标题222" },
}
],
},
onLoad: function (options) {
var that = this;
var aaa=1;
var db_total=0;
const db = wx.cloud.database()
const _ = db.command
db.collection('wy_gcb').where({}).count({
success: function (res) {
db_total = res.total
console.log('总数1111: ', db_total)
}
})
aaa=1
console.log('1111总数1111: ', db_total)
while (aaa <= db_total) {
this.data.markers.push({
id: 2,
latitude: 0,
longitude: 0,
label: {
content: '我是这个气泡',
fontSize: 14,
color: '#ffffff',
bgColor: '#000000',
padding: 8,
borderRadius: 4,
boxShadow: '4px 8px 16px 0 rgba(0)'
},
}),
await db.collection('wy_gcb').where({ t0: aaa }).get({
success: res => {
this.setData({
'markers[2].longitude': res.data[0].t4
})
this.setData({
'markers[2].latitude': res.data[0].t5
})
this.setData({
'markers[2].label.content': res.data[0].t2
})
console.log('[数据库] [查询记录] 成功: ', res)
console.log('写入数据', aaa)
},
fail: err => {
wx.showToast({
icon: 'none',
title: '查询记录失败'
})
console.error('[数据库] [查询记录] 失败:', err)
}
})
aaa=aaa+1
console.log('循环: ', aaa)
}
// console.log('测试1: ', this.data.markers[0].latitude)
// console.log('测试1: ', this.data.markers[0].label.content)
// console.log('测试2: ', this.data.markers[1].latitude)
// console.log('测试3: ', this.data.markers[2].latitude)
},
add_mark: function (options) {
},
change_mark: function (options) {
var that = this;
that.setData({ 'markers[0].label.content': '更改更改更改测试字符串!' })
console.log('测试123: ', this.data.markers[0].label.content)
},
})
知道了,谢谢!
这是一个典型的闭包问题,用闭包思维方式来处理即可。