无法使用Fetch-node存储get调用的结果

时间:2018-08-24 19:07:15

标签: javascript node.js ajax promise es6-promise

我正在使用Fetch节点获取服务的GET。

 const response = await fetch("MY URL", {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
        },
        timeout: 5000,
      }).then(res => res.json()).then(json => console.log(json));
      console.log(response);

我将结果记录在第二个console.log()中,然后一切正常。 但是,当涉及第二个console.log()时,响应是不确定的。 我需要的是第二秒中记录的任何内容,以存储在响应中。

我的工作有什么问题吗?

3 个答案:

答案 0 :(得分:2)

如前所述,您没有返回response的值,因此它将不等于任何值。您可以return来自最终then的JSON,或者如果您觉得它更干净,则只需await两者,而不是完全使用.then

const response = await fetch("MY URL", {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
        },
        timeout: 5000
      });

const json = await response.json();

console.log(json);

答案 1 :(得分:1)

您应该在函数中返回值。

const response = await fetch("MY URL", {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
        },
        timeout: 5000,
      }).then(res => res.json()).then(json => { 
         // do something 
         return json  //<--- return a value
        });
      console.log(response);

答案 2 :(得分:1)

您可以使用async / await编写整个代码。在代码中,您混合了promise和async / await语法,却忘记了从上一个json函数返回.then()

这是我编写代码的方式:

async function fetchData() {
  const response = await fetch("https://jsonplaceholder.typicode.com/todos/1", {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
    },
    timeout: 5000,
  })
  const data = await response.json();
  console.log(data);
}

fetchData();