首先我们需要了解useEffect的工作原理。

useEffect中的回调函数返回的是一个清除器函数,即返回值必须为 函数,那如果使用async后,我们知道,async返回的是一个Promise对象,具体的原因需要参照react源码了,指路:

useEffect中不能使用async原理详解_React_脚本之家 (jb51.net)

那么如何实现呢?

内部再写一个自执行函数即可,这种方法比较简陋

useEffect(() => {
        (async ()=>{
            await new Promise()
        })()
    }, [])

但这个依然有问题,因为返回值永远是undefined,即无法取消订阅

Q.E.D.