vue 通过请求获取数据return回来,不好使
vue里面在data里面定义了变量,想要通过http请求获取,使用return不好使,刷新的时候取缓存好使
直接this.获取好使,但是this.代码量比较大,还是希望return可以解决
相关代码
created () {
this.sydLb = this.getEnumTypeDict({ parentcode: '01' })
this.sydJb = this.getEnumTypeDict({ parentcode: '04' })
},
methods: {
getEnumTypeDict (params) {
if (JSON.parse(window.localStorage.getItem(`sydJb${params.parentcode}`))) {
return JSON.parse(window.localStorage.getItem(`sydJb${params.parentcode}`))
}
api.getEnumTypeDict(params).then(res => {
if (res.status === 200 && res.data.code) {
setLocalStorage(`sydJb${params.parentcode}`, res.data.data.data)
return res.data.data.data
}
}).catch(error => {
console.log(error)
})
}
}
希望可以解决这个问题,使用this写两个方法实在有点麻烦
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
哈哈,好问题;大部分初学者都是犯这个错误;
你的代码里面其实有2个东西需要解释:
Promise
同一个方法,即包含同步代码又包含异步代码
这个方法如何封装第一个问题:
会想下,在没有
promise
这样的语法的时候,我们怎么处理异步编程的? 答案是回调函数
,示例如下(用setTimeout 模拟异步)这个时候使用
a
函数的时候,你无法通过let data = a()
得到任何值;因为 return 的语句执行在异步里面;可以理解为let data = a()
这个先被执行完毕了之后,才会执行return
; 所以需要通过回调解决ok,
那么,通过
Promise
如果实现所以:你的代码中 直接通过
return
不能拿到值再说第二个问题: 这个场景很常见,就是如果本地缓有数据我就取本地缓存(这是同步),如果没有为就通过API获取(这是异步)
这种场景,为工作中常用的做法,就是把函数本身封装成
Promise
;不管是同步还是异步都通过 异步去处理; 当然这里也推荐 使用rxjs
解决问题; 因此你的代码改造如下