关于纯函数编程语言purescript如何处理使用Aff
单子的过期效应问题,我想说一句话:太棒了!
没有使用purescript时
你必须使用AbortController。
function App() {
const [ data, setData ] = React.useState([]);
React.useEffect(() => {
const abortController = new AbortController();
void async function fetchData() {
try {
const url = 'https://jsonplaceholder.typicode.com/todos/1';
const response = await fetch(url, { signal: abortController.signal });
setData(await response.json());
} catch (error) {
console.log('error', error);
}
}();
return () => {
abortController.abort();
};
}, []);
return <pre>{JSON.stringify(data, null, 2)}</pre>;
}
或者过期
(来自NoahZinsmeister/web3-react示例)
function Balance() {
const { account, library, chainId } = useWeb3React()
const [balance, setBalance] = React.useState()
React.useEffect((): any => {
if (!!account && !!library) {
let stale = false
library
.getBalance(account)
.then((balance: any) => {
if (!stale) {
setBalance(balance)
}
})
.catch(() => {
if (!stale) {
setBalance(null)
}
})
return () => {
stale = true
setBalance(undefined)
}
}
}, [account, library, chainId])
...
使用 PureScript
查看如何 在 cleanup
函数中使用 useAff
来终止 Aff
Aff
是作为状态机(不使用 promises)实现的
但是这里与我们相关的是: