Node.js 使用异步函数导致数据泄漏
我在使用非同步函数时遇到数据泄漏,导致我的应用程序在导航期间无法加载第二页 我在get请求中使用了async/await,并且我尝试使用清理功能来防止此泄漏,但它不起作用 如何修复此漏洞,并在加载页面时仍获取要加载的数据Node.js 使用异步函数导致数据泄漏,node.js,reactjs,mongodb,axios,use-effect,Node.js,Reactjs,Mongodb,Axios,Use Effect,我在使用非同步函数时遇到数据泄漏,导致我的应用程序在导航期间无法加载第二页 我在get请求中使用了async/await,并且我尝试使用清理功能来防止此泄漏,但它不起作用 如何修复此漏洞,并在加载页面时仍获取要加载的数据 import React, { useEffect, useState, useContext } from "react"; import ReactTable from "react-table"; import "react-table/react-table.css";
import React, { useEffect, useState, useContext } from "react";
import ReactTable from "react-table";
import "react-table/react-table.css";
import axios from "axios";
import StatusContext from "../../context/status/statusContext";
const Table = props => {
const [tableData, setTableData] = useState([]);
const statusContext = useContext(StatusContext);
useEffect(async () => {
await axios
.get("/api/status")
.then(function(response) {
console.log(response.data);
setTableData(
response.data.filter(item => {
let itemDate = new Date(item.date);
let variableDate = new Date() - 604800000;
return itemDate > variableDate;
})
);
})
.catch(function(error) {
console.log(error);
});
}, [statusContext]);
const columns = [
{
id: "Name",
Header: "Name",
accessor: "name"
},
{
Header: "Date",
accessor: "date"
},
{
Header: "Comment",
accessor: "comment"
}
];
return (
<ReactTable
data={tableData}
columns={columns}
pivotBy={["date"]}
defaultPageSize={7}
minRows={5}
/>
);
};
export default Table;
import React,{useffect,useState,useContext}来自“React”;
从“反应表”导入反应表;
导入“react table/react table.css”;
从“axios”导入axios;
从“../../context/status/StatusContext”导入StatusContext;
const Table=props=>{
const[tableData,setTableData]=useState([]);
const statusContext=useContext(statusContext);
useffect(异步()=>{
等待axios
.get(“/api/status”)
.然后(功能(响应){
console.log(response.data);
可设置数据(
response.data.filter(项=>{
设itemDate=新日期(item.Date);
设variableDate=新日期()-604800000;
返回itemDate>variableDate;
})
);
})
.catch(函数(错误){
console.log(错误);
});
},[statusContext]);
常量列=[
{
id:“姓名”,
标题:“姓名”,
访问者:“名称”
},
{
标题:“日期”,
访问者:“日期”
},
{
标题:“评论”,
访问者:“评论”
}
];
返回(
);
};
导出默认表;
确实没有必要将async/await
引入这种情况,事实上,如果这样做,useffect
将不起作用。您可以从useffect
返回的唯一内容是清理函数,async
函数返回承诺
这应该可以正常工作,包括一个清理功能,以防在承诺解决之前卸载组件:
useffect(()=>{
让isMounted=真;
axios
.get(“/api/status”)
.然后(功能(响应){
如果(!isMounted){
返回;
}
console.log(response.data);
可设置数据(
response.data.filter(项=>{
设itemDate=新日期(item.Date);
设variableDate=新日期()-604800000;
返回itemDate>variableDate;
})
);
})
.catch(函数(错误){
console.log(错误);
});
return()=>{
isMounted=错误;
}
},[statusContext]);
useffect(async()=>{
不要这样做。这样useffect
中的函数将返回Promise
,而不是React所期望的另一个函数。你甚至不需要它,因为你已经链接到。然后
/。捕获
。一旦你删除async
“数据泄漏”怎么办看起来像?控制台中有错误吗?