vue中methods有值但是传到mounted却是undefined,这是为什么 该怎么办?
mounted() {
this.$nextTick(() => {
getPeixianMapData().then(res => {
let top10Datas = this.getPeixianMapValue()
console.log('top10Datas', top10Datas)
this.initChart(top10Datas)
})
})
},
methods: {
getPeixianMapValue() {
getPeixianMapValue(0, 10000, {}).then(res => {
let rd = res.data.content
function compare(property){
return function(a,b){
let value1 = a[property];
let value2 = b[property];
return value2 - value1;
}
}
let sortData = rd.sort(compare('value'))
let top10Data = []
for (let i = 0; i < 10; i++) {
top10Data.push(sortData[i])
}
console.log('top10', top10Data)
return top10Data
})
},
......
}
getPeixianMapValue() {
return new Promise((resolve) => {
getPeixianMapValue(0, 10000, {}).then(res => {
let rd = res.data.content
function compare(property) {
return function (a, b) {
let value1 = a[property];
let value2 = b[property];
return value2 - value1;
}
}
let sortData = rd.sort(compare('value'))
let top10Data = []
for (let i = 0; i < 10; i++) {
top10Data.push(sortData[i])
}
console.log('top10', top10Data)
resolve(top10Data)
})
})
}
getPeixianMapValue 是异步的还是同步的 如果是异步的 那你肯定拿不到
想返回异步结果 肯定不能直接写return 哦
getPeixianMapValue都是异步的,return怎么可能拿到结果,可以返回promise
在各个大佬的帮助下 终于能运行出来了
最终的解决方案还挺简单的
mounted() {
this.$nextTick(() => {
getPeixianMapData().then(res => {
this.getPeixianMapValue().then(res => {
let top10Datas = res
this.initChart(top10Datas)
})
})
})
},
methods: {
getPeixianMapValue() {
return getPeixianMapValue(0, 10000, {}).then(res => {
let rd = res.data.content
function compare(property) { //排序
return function (a, b) {
let value1 = a[property];
let value2 = b[property];
return value2 - value1; //倒序 value1-value2 正序
}
}
let sortData = rd.sort(compare('value'))
let top10Data = []
for (let i = 0; i < 10; i++) {
top10Data.push(sortData[i])
}
return top10Data
})
},
}
就通过了两个 return就传出来了 (虽然我也不懂这是为啥 有大佬看到也可以在下面帮忙解释) 主要还是上面mounted需要通过then调用这才是关键步骤
把mounted换为created试试,一般这里调用都没有问题,如果还有问题可以考虑用settimeout延时处理,有时调用摄像头等必须这样实现。