問題描述
函數不返回對像以供 .then 使用 ‑ 但能夠 console.log 對象,並明確返回它 (Function not returning object for .then to work with ‑ but able to console.log the object, and am explicitly returning it)
請有人幫忙解釋一下為什麼這個 .then 沒有在它之前獲取函數調用的返回值?在我部署到heroku之前這是有效的,我感覺它與急切加載有關,但我真的不知道。
基本上問題是:handleSubmit註冊調用註冊函數,哪個旨在返回一個用戶對象,但 .then 沒有從註冊函數提供返回值,並且錯誤:無法讀取未定義的屬性 .then。所以我的handeSubmit 嘗試註冊到應用程序失敗。
註冊方法本身正常運行(用戶被添加到後端 [Rails],JWT 被提供並設置在瀏覽器的本地存儲中,以及用戶對象從 API 呈現為 JSON 並成功記錄控制台)。
handleSubmit 看起來像這樣:
e.preventDefault();
API.signup({ username, password })
.then(user => {
console.log(user);
props.setUser(user);
history.push("/home");
})
.catch(errors => {
setErrors(errors[errors]);
console.error(errors);
});
};
註冊功能看起來像這樣:
const signup = userDetails => {
fetch(SIGNUP_URL, {
method: "POST",
headers: {
"Content‑Type": "application/json",
Accept: "application/json"
},
body: JSON.stringify({ user: userDetails })
})
.then(jsonify)
.then(data => {
localStorage.setItem("token", data.token);
console.log(data.user)
return data.user
})
};
有趣的是我的登錄功能,除了點擊不同的端點外,它與註冊(甚至相同的 handleSubmit)相同在我的 API 上,工作得非常好。
我很確定這不是 CORS 問題,否則登錄也無法正常工作。感謝您提供有關如何調試此問題的任何建議。我可以根據要求提供後端和前端代碼。
我很確定,否則登錄也不起作用。感謝您提供有關如何調試此問題的任何建議。我可以根據要求提供後端和前端代碼。 我很確定,否則登錄也不起作用。感謝您提供有關如何調試此問題的任何建議。我可以根據要求提供後端和前端代碼。參考解法
方法 1:
Your singup
function doesn't return anything hence why you get the error
either use return
keyword before fetch or remove {}
around your function
(by Chris Kennedy、Sven.hig)