node.js - 为什么我的 Axios 承诺不按预期分配对象?
问题描述
我对此比较陌生,不明白为什么会发生这个错误。我正在尝试调用 axios 发布请求来访问数据库并让用户登录,但承诺没有按预期运行。它将访问数据库并返回一个对象,但是每当我尝试在下面分配“结果”时,它说结果仍然是一个空对象,里面有一个 __proto__ 对象,即使 console.log(result) 会打印出我的数据想。我怎样才能将我需要的数据放入“结果”对象而不是只是一个空变量?
我在这里附上了我的代码:
const userlogin = {
company: this.state.company,
email: this.state.email,
password: this.state.password
}
let result = {}
axios.post('http://localhost:5000/login', userlogin)
.then(res => {
console.log(res.data[0])
result = res.data[0]
})
.catch(res => {
console.log("Failed")
})
console.log(result)
window.location = '/'
打印 res.data[0] 正是我想要的,但是当我将它分配给结果并打印结果时,它会显示一个带有 __proto__ 的空对象。我已经为此苦苦挣扎了一段时间,任何帮助将不胜感激!非常感谢!
解决方案
axios.post().then()
是非阻塞和异步的。这意味着axios
请求已启动,然后是运行后的代码(包括您的console.log()
)。然后,一段时间后,axios 操作完成,promise 解析,然后.then()
调用处理程序。
因此,console.log(result)
在为它分配值之前运行。稍后会调用回调,.then()
因此您尝试查看result
分配之前的回调。
此处正确的解决方案是使用result
INSIDE.then()
处理程序或从那里调用某个函数并将值传递给该函数。您无法在.then()
处理程序之外可靠地使用该值,因为您不知道它何时被实际设置。
推荐阅读
- c - 对角线而不是左侧打印字符串
- node.js - 安装一个对等的东西
- python - df.rename() - TypeError: 'Index' object is not callable
- reactjs - React fetch 到 Express API 不起作用,有什么提示吗?
- chart.js - 如何将次要/主要配置添加到 Ticks
- javascript - 移除多个产品时,购物车系统出现故障
- css - 预定义样式不会改变
- javascript - 全局更改默认超时或仅用于一个测试的好习惯是什么?摩卡
- javascript - Vue:从数组中删除第一个元素并对其进行迭代
- java - 如何使用 Spring Boot 和 Java 库在谷歌上创建操作