LOG {"_U": 0, "_V": 0, "_W": null, "_X": null} inside fetch API

LOG {"_U": 0, "_V": 0, "_W": null, "_X": null} inside fetch API

当我控制从后端获取数据的函数返回的数据时出现此错误

{"_U": 0, "_V": 0, "_W": null, "_X": null}

下面是代码:

const events_data = [];
function getvals() {

    return fetch('http://PCIP:3000/users/timetable')
        .then((response) => response.json())

        .then((output) => {
            return addData(output, events_data);
        })


        .catch(error => console.log(error))
}

function addData(data, data2) {
    data.map((d) => {
        data2.push({
            title: d.name,
            startTime: genTimeBlock(d.day, d.start_time),
            endTime: genTimeBlock(d.day, d.end_time),
            location: d.location,
            extra_descriptions: [d.extra_descriptions],
        });
    });
}


const data = getvals();
console.log(data); // the error come from here 

我已经检查了这里的答案,但对我没有任何帮助

如何在函数外访问 promise 回调值?

这是因为获取承诺还没有return响应,

有两种方法可以解决这个问题,首先你创建另一个异步函数并用它来等待响应

const events_data = [];
async function getvals() {

    return fetch('http://PCIP:3000/users/timetable')
        .then((response) => response.json())

        .then((output) => {
            return addData(output, events_data);
        })


        .catch(error => console.log(error))
}

function addData(data, data2) {
    data.map((d) => {
        data2.push({
            title: d.name,
            startTime: genTimeBlock(d.day, d.start_time),
            endTime: genTimeBlock(d.day, d.end_time),
            location: d.location,
            extra_descriptions: [d.extra_descriptions],
        });
    });
}

async function waitForResponse() {
let resp = await getvals();

return resp;
}

const data = waitForResponse();
console.log(data); // the error come from here 

另一种方法是使用状态挂钩,在响应时将 return obj 传递给状态挂钩。

API 调用的函数:

  export const getApplication = async (URL, headers) => {
    let data;
    await fetch.get(URL, headers).then(res => data = res.data).catch(err => err);
    return data;
  }

您可以在导入后从任何地方调用 API:

      getApplication(`your url`, {
        headers: {
          Authorization: AUTH_TOKEN,
        },
      }).then(res => console.log(res)).catch(err => console.log(err));