函數不返回對像以供 .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 使用 ‑ 但能夠 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 KennedySven.hig)

參考文件

  1. Function not returning object for .then to work with ‑ but able to console.log the object, and am explicitly returning it (CC BY‑SA 2.5/3.0/4.0)

#fetch #return #javascript #ruby-on-rails #Heroku






相關問題

mysql fetch 中的 $row 是什麼類型的變量? (What kind of variable is $row from a mysql fetch?)

如何在 PHP 中使用 bind_params 正確獲取數據到數組 (How to correctly fetch data to array with bind_params in PHP)

使用 JavaMail 加速電子郵件檢索 (Speed up email retrieval with JavaMail)

使用 eclipselink 從多個表中獲取數據 (Fetch data from multiple tables using eclipselink)

如何在 Webassembly 中獲取 JSON 文件 (How to Fetch a JSON file in Webassembly)

mysqli(a,b,c,d)->query(sql)->fetch_assoc() 究竟是如何工作的? (How exactly does mysqli(a,b,c,d)->query(sql)->fetch_assoc() work?)

如何在 .map 中返回異步函數? (How do I make an asynchronous function return in .map?)

如何僅在響應中的 onclick 事件後映射 json 列表? (How to map a json list only after an onclick event in react?)

在第二個 API 中使用來自第一個 API 的信息 - React (Using information from the first API in the second one - React)

使用 Jest 測試框架調用 fetch(url) 時如何根據 url 模擬變量響應? (How to mock variable responses based on the url when fetch(url) is called using the Jest testing framework?)

函數不返回對像以供 .then 使用 - 但能夠 console.log 對象,並明確返回它 (Function not returning object for .then to work with - but able to console.log the object, and am explicitly returning it)

fetch api - 400 加載資源失敗 (fetch api - 400 failed to load resource)







留言討論