非常简单的问题。当我在第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)
答案 0 :(得分:2)
我不确定您为什么要访问axios get电话之外的jsonPayload
,但我确实知道您从外部{}
收到console.log()
日志的原因
axios.get()
上述方法将返回Compiler Explorer。此承诺允许您保护您的下一个进程免于接收空数据。
在.then()
方法中,您可以检索从axios.get()
调用发回给您的数据。但是,在完成从API检索数据的过程之前,此数据无法与您联系。
这是您遇到问题的地方。在{ajax调用完成之前,console.log()
方法之外的.then()
正在触发。
您还可以考虑使用ES7 async
和await
。这允许您在没有axios
的情况下编写这些.then()
次来电。
答案 1 :(得分:0)
您无法执行此操作,因为请求是以异步方式处理 。
答案 2 :(得分:0)
在@ d3L回答时,您仅限于处理传递给callback
的{{1}}内的回复。但是,在ES8之后,您可以使用.then
,它可以替代使用带回调的典型Promise处理。仍然是异步的,但看起来是同步的:
async / await
请注意,无论您是在节点还是浏览器上运行它,引擎都可能不支持它,因此您可能需要使用babel来转换代码。