首页 > 解决方案 > 为什么我的 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__ 的空对象。我已经为此苦苦挣扎了一段时间,任何帮助将不胜感激!非常感谢!

标签: node.jspostpromiserequestaxios

解决方案


axios.post().then()是非阻塞和异步的。这意味着axios请求已启动,然后是运行后的代码(包括您的console.log())。然后,一段时间后,axios 操作完成,promise 解析,然后.then()调用处理程序。

因此,console.log(result)在为它分配值之前运行。稍后会调用回调,.then()因此您尝试查看result分配之前的回调。

此处正确的解决方案是使用resultINSIDE.then()处理程序或从那里调用某个函数并将值传递给该函数。您无法在.then()处理程序之外可靠地使用该值,因为您不知道它何时被实际设置。


推荐阅读