Vue作用域,mounted调用methods方法return失败

图片说明
如上图,我在mounted()中调用methods中的方法getDictCity();
再控制台能打印出数据,但是return返回的话,再mounted()中就接不到数据;
请大家帮忙指点,谢谢!

你要搞清楚,return返回的是then处理函数的返回值,并不是getDictCity的返回值,就算你getDictCity最后有return返回内容,由于get是异步执行的,所以你也无法获取到请求的url返回的内容,除非get可以设置为同步请求的

你要在mounted中获取ajax返回的数据,要用回调的形式来获取,而且你在哪里设置的cityTop也没见着

 getDictCity(name,callback){
ns.get....then(res=>{
 let onlyArr=[];
 ......
 callback(onlyArr);//不能return,return没意义
})....
}

///这样来调用
this.getDictCity('下游',function(arr){
console.log(arr);
})

异步函数,需要使用async/await组合,或者promise.then形式的调用,方可获得结果

相当于ajax请求啊 调用了get方法 结果返回的值只能在方法内使用。你可以在return前 用参数调用一个别的js方法

首先,getDictCity这个函数,并没有明确返回值。return onlyArr只是.then的回调函数的返回值,可以给后面链式调用的.then继续使用,并不会返回到getDictCity这个函数体外面。
其次,ns.get是个异步方法,回调函数里面的return并不能实时返回,你根本不能知道什么时候能拿到onlyArr的值。
建议你只在mounted里面执行getDictCity这个函数即可,拿到onlyArr后的处理逻辑,在getDictCity这个函数里面写。

showbo 说的很对, 你那个方法 return 是返回给回调函数的, 并不是主函数的返回值!

补充说明: (1)既然初始化要请求 “上游”、 “中游” 、“下游” 的数据; 为什么不能放在 一个请求里面 ? 要分为三次请求呢?
这样就可以用一个全局变量来接收请求结果, 而不需要反复调用三次!!!
(2)理解js 请求: 一次请求中多做事, 尽量减少请求次数