Vue3中的Axios响应未定义,但仅适用于第一个POST请求,那么它工作正常

qfe3c7zg  于 2023-05-06  发布在  iOS
关注(0)|答案(1)|浏览(130)

我有两个Vue 3组件:
在第一个中,我有这个函数,它通过按下一个按钮来触发,并将响应从后端发送到第二个组件:

methods: {
        postMessage(){
             
            label = {'label': this.selectedOption, 'status': 'true'}

            const path = 'http://localhost:5000/labeling';
            axios.post(path, label)
            .then(response => 
            {   
                console.log('response right after arriving',response)
                this.submit_status = response.data
                console.log('submit_status right after arriving_2',this.submit_status)
                this.status = response.data.status
                console.log('response right after arriving_3',this.status)
            })
            //.catch(error => console.error('error:',error));
            console.log('exit the response function?')
            if(status == 'False')
            {
                alert('entire csv file labeled')
            }
            else{
                this.emitter.emit('received_coordinates',this.submit_status);
            }
        }

在第二个组件中,使用发出的变量“received_data”。

mounted(){
        this.index = 1
        this.emitter.on("received_coordinates", (received_data) => {
                    this.coordinates = received_data.scan_cart
                    this.index = received_data.index
                }
        })
    },

以下错误ONLY发生在第一次发射过程之后:
received_data.scan_data未定义(由第二个组件触发)
我已经检查了浏览器中的网络选项卡,数据传输正确。错误似乎发生在.then语句被触发之前:

之后,响应数据到达,但错误已经发生:

68de4m5k

68de4m5k1#

我认为你必须把emit放在.then()里面:

methods: {
        postMessage(){
             
            label = {'label': this.selectedOption, 'status': 'true'}

            const path = 'http://localhost:5000/labeling';
            axios.post(path, label)
            .then(response => 
            {   
                this.submit_status = response.data
                this.status = response.data.status
            
                // emit event after this.submit_status has been set
                if(status == 'False')
                {
                    alert('entire csv file labeled')
                }
                else{
                    this.emitter.emit('received_coordinates',this.submit_status);
                }
            })
        }

目前,该事件是在发送post请求之后发出的,因此在设置this.submit_status之前,当访问undefined上的属性时会出现错误。

相关问题