javascript - data.json不是reactjs使用Fetch API的函数

标签 javascript reactjs fetch-api

我有使用 fetch api 的删除函数,但在删除时,我收到此错误,data.json 不是函数

这是我的代码

export const deleteLeaveType = async id => {
  const response = await fetch(
   `${API_LINK}/route/route/route/${id}`, {
    method: 'delete',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${Auth.getToken()}`,
     },
   }
  );
  return getData(response);
};

我在另一个文件中调用它

const deleteLeaveType = async id => {
  let deleteLeaveType = isLeaveType.filter(
    item => item.id !== id
  );

  await CalendarManagementAPI.deleteLeaveType(id)
    .then(data => {
      console.log(data.json());
      setLeaveType(deleteLeaveType);
    });
    setLoadingLeaveTypes(false);
    fetchLeaveTypes();
  })
  .catch(error => {
    console.log(error);
  });
};

最佳答案

主要问题:

您遇到的主要问题是,在您的顶级 deleteLeaveType 函数中,您以 return getData(response) 结束,而不是仅返回您想要的任何内容从您的 fetch 请求收到。

the docs 可以看出,使用 fetch 的正常方法是只执行 const response = wait fetch(...) (正如您已经完成的那样),然后在调用之后立即执行 >data.json() (顺便说一句,这是另一个异步函数)。但是,您的 getData(response) 函数可能没有完全返回您所期望的结果。

其他评论:

正如评论中提到的,您可能不应该与 .then() 同时使用 async/await。这是处理异步函数的两种不同方法,因此一次只能使用一种方法。

在您的 deleteLeaveType 函数中,如果您更喜欢使用 .then 来处理异步函数,您可以删除或 asyncawait 像这样:

// remove 'async' from function declaration
const deleteLeaveType = id => {
  // keep original code      

  // remove 'await'
  CalendarManagementAPI.deleteLeaveType(id)
    .then(data => {
      // ... everything else the same
};

OR 以正确的方式使用 async/await,就像您在第一个 deleteLeaveType 中使用的那样问题,请执行以下操作:

const deleteLeaveType = async id => {
  let deleteLeaveType = isLeaveType.filter(
    item => item.id !== id
  );

  let data = await CalendarManagementAPI.deleteLeaveType(id);

  // ... the rest of your code
};

这里有一篇有趣的文章,解释了使用 async/await 进行错误处理的一些想法,如果您感兴趣的话:Better error handling with async / await

我还建议不要对两个函数一个数组使用相同的变量名deleteLeaveType。对于您在任何给定时刻所引用的内容,这可能会有点令人困惑。

关于javascript - data.json不是reactjs使用Fetch API的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58668008/

相关文章:

javascript - 当数据加载太快时骨架加载器会闪烁

javascript - 单击编辑按钮时如何使用数据库值填充 HTML 表单?

javascript - 外部加载页面的事件监听器

javascript - 将内联函数表达式作为参数传递给常规函数

reactjs - React Native - 退出应用程序时调用方法

reactjs - Azure Devops NPM 请将您的工作目录更改为有效目录

javascript - 为什么异步数组映射返回 promise ,而不是值

javascript - 您知道 Solar Hijridates 的 JavaScript 小部件吗?

javascript - 将多个 props cons 更改为 class

cors - 在我设置凭据 : "include" 后,获取请求、set-cookie 和 cookie 将被忽略