我正在嘗試創建一個上傳檔案并將當前用戶作為外鍵附加到檔案模型的網路應用程式。由于某種原因,get 請求正在被清除,但它最初確實獲得了所需的資訊。
handleSubmit = (e) => {
e.preventDefault();
axios.get('http://127.0.0.1:8000/core/current_user/', {
headers: {
Authorization: `JWT ${localStorage.getItem('token')}`,
}
}).then((user) => {
this.state.creator = user.data;
console.log(this.state.creator);
})
console.log(this.state.creator);
let form_data = new FormData();
form_data.append('creator', this.state.creator);
form_data.append('file', this.state.file);
form_data.append('title', this.state.title);
form_data.append('description', this.state.description);
axios.post('http://localhost:8000/core/posts/', form_data, {
headers: {
'Content-Type': 'multipart/form-data',
Authorization: `JWT ${localStorage.getItem('token')}`,
}
}).then(res => {
console.log(res.data);
}).catch(err => console.log(err))
};
第一個控制臺回傳用戶資訊,但第二個控制臺回傳 null。任何幫助將不勝感激。
uj5u.com熱心網友回復:
您then在原始陳述句之后的陳述句在第get11 行結束,而您的其余代碼則在此之外。
對于異步代碼,then塊外的代碼在等待回應時將繼續運行,因此this.state.creator尚未設定。then一旦承諾解決,它將回傳到塊內的代碼。
您需要將所有第二個代碼塊移動到初始then塊中,以便它僅在對原始get請求的回應回傳后才執行:
handleSubmit = (e) => {
e.preventDefault();
axios
.get('http://127.0.0.1:8000/core/current_user/', {
headers: {
Authorization: `JWT ${localStorage.getItem('token')}`,
},
})
.then((user) => {
this.state.creator = user.data;
console.log(this.state.creator);
let form_data = new FormData();
form_data.append('creator', this.state.creator);
form_data.append('file', this.state.file);
form_data.append('title', this.state.title);
form_data.append('description', this.state.description);
axios
.post('http://localhost:8000/core/posts/', form_data, {
headers: {
'Content-Type': 'multipart/form-data',
Authorization: `JWT ${localStorage.getItem('token')}`,
},
})
.then((res) => {
console.log(res.data);
})
.catch((err) => console.log(err));
});
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364578.html
標籤:javascript 反应 反应原生 接口 公理
