在axios.get请求到的值怎么在外部使用?

发布于 2022-09-07 21:13:52 字数 1111 浏览 15 评论 0

问题描述

在axios.get方法的外部使用内部定义的变量值时出错。
ipAddress的值是当前ip所在的国家代码,我希望能从get方法外部取到这个值。
试过定义一个变量将axios.get方法整个赋值给它,但是这样得到的是一个promise对象。
用全局变量也没有成功,不知道是不是自己代码写错了

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

下面代码得到的是promise变量
var getIP = axios.get('http://ip-api.com/json').then(function (response) {
    var ipAddress = response.data.countryCode
    console.log(ipAddress)
}).catch(function (error) {
  console.log(error)
})
console.log(getIP)

全局变量代码
App.vue文件中:
<script>
    export default {
      name: 'App',
      created: function () {
      },
      ipAddress: ''
    }
</script>

event.vue文件中:
import _global from '../App.vue'
created: function () {
    Vue.prototype.GLOBAL = _global
    axios.get('http://ip-api.com/json').then(function (response) {
      _global.ipAddress = response.data.countryCode
    }).catch(function (error) {
      console.log(error)
    })
    console.log(this.GLOBAL.ipAddress)
}

使用全局变量方法时console.log(this.GLOBAL.ipAddress)的值还是App.vue中ipAddress的空值,但是每次我改变App.vue中ipAddress值的时候,控制台会输出一次正确的值,之后输出的都是改变的那个值。求指点 = =||

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

友欢 2022-09-14 21:13:52

这样,你可以使用es7的 async/await语法糖

let getIP = ''
try {
    (async () => {
        getIP = (await axios.get('http://ip-api.com/json')).data.countryCode
    })()
} catch (e) {
    console.log(e)
}
console.log(getIP)

这样得到的getIP就是你需要的数值,而不是Promise对象,大致是这样子的,你可以去看看async/await怎么使用

水晶透心 2022-09-14 21:13:52

第一次是请求还没有完成,就算axios.get('http://ip-api.com/json') 这个请求在瞬间完成了,那么这个promise 的resolve 函数肯定是在console.log(this.GLOBAL.ipAddress) 之后执行的,此时this.GLOBAL.ipAddress 肯定是初始值,也就是空的。

你好,陌生人 2022-09-14 21:13:52

发现是数据异步获取的原因,而且axios不支持数据同步获取,然后换成ajax就好了,当时解决之后忘记来关闭问题了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文