在React Fetch调用中从Node API访问Promise数据

时间:2019-02-19 20:52:46

标签: javascript ajax reactjs express

我正在组装一个React应用程序,该应用程序使用当前位于本地计算机上的Node / Express REST API中的数据。我有一个简单的res.json返回Sequelize对象,并且正在通过我提供的服务来访问它。显然,最终我将把对象放到state中,但是我目前很难访问这些值。

const options = {
    method: "POST",
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    body: JSON.stringify({email: "matthewharp@gmail.com", password: "M1nerals"})
};
fetch('http://localhost:3000/users/sign_in', options)
    .then(response => console.log(response.json()));

我正在控制台中获得结果,但结果卡在[[PromiseValue]]中。

enter image description here

我必须缺少某种异步步骤,但是我不确定是什么。

4 个答案:

答案 0 :(得分:0)

json方法返回一个Promise,您需要等待。也是这样:

fetch('http://localhost:3000/users/sign_in', options)
    .then(response => response.json())
    .then(obj => console.log(obj));

答案 1 :(得分:0)

您遇到此错误是因为response.json()返回了诺言。

您需要做 fetch('http://localhost:3000/users/sign_in', options) .then(response => response.json()) .then(res => console.log(res));

答案 2 :(得分:0)

您需要从fetch调用中返回诺言,否则您需要在json诺言中对它进行操作。

const options = {
    method: "POST",
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    },
    body: JSON.stringify({email: "matthewharp@gmail.com", password: "M1nerals"})
};
return fetch('http://localhost:3000/users/sign_in', options)
    .then(response => {
         console.log(response.json())
         return response.json()
    }
);

或...

const options = {
        method: "POST",
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        body: JSON.stringify({email: "matthewharp@gmail.com", password: "M1nerals"})
    };
   fetch('http://localhost:3000/users/sign_in', options)
        .then(response => {
             console.log(response.json())
            response.json().then( result => {
               // whatever you're doing with the data here.
        }
    );

答案 3 :(得分:0)

看看fetch api: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

您需要链接一个单独的then以便在准备好json数据后使用它,它将为您提供值。

('http://localhost:3000/users/sign_in', options)
.then(function(response) {
    return response.json();
})
.then(function(myJson) {
    console.log(JSON.stringify(myJson));
});