如何访问axios请求之外的值?

时间:2018-02-19 01:24:44

标签: javascript axios

非常简单的问题。当我在第6行的jsonPayload上运行console.log时,我看到了预期的输出。当我在最后一行的jsonPayload上再次运行console.log时,它返回一个空的{}。如何在初始请求之外访问有效负载?

var jsonPayload = {}
axios.get('http://localhost:8080/api/tools')
.then(function (response) {
  jsonPayload = response.data[0]

  // this returns the expected payload
  console.log(jsonPayload)
})
.catch(function (error) {
  console.log(error)
})

// this returns empty {}
console.log(jsonPayload)

3 个答案:

答案 0 :(得分:2)

我不确定您为什么要访问axios get电话之外的jsonPayload,但我确实知道您从外部{}收到console.log()日志的原因

axios.get()

上述方法将返回Compiler Explorer。此承诺允许您保护您的下一个进程免于接收空数据。

.then()方法中,您可以检索从axios.get()调用发回给您的数据。但是,在完成从API检索数据的过程之前,此数据无法与您联系。

这是您遇到问题的地方。在{ajax调用完成之前,console.log()方法之外的.then()正在触发。

您还可以考虑使用ES7 asyncawait。这允许您在没有axios的情况下编写这些.then()次来电。

答案 1 :(得分:0)

您无法执行此操作,因为请求是以异步方式处理

答案 2 :(得分:0)

在@ d3L回答时,您仅限于处理传递给callback的{​​{1}}内的回复。但是,在ES8之后,您可以使用.then,它可以替代使用带回调的典型Promise处理。仍然是异步的,但看起来是同步的:

async / await

请注意,无论您是在节点还是浏览器上运行它,引擎都可能不支持它,因此您可能需要使用babel来转换代码。