首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录:键入'Promise<void>‘不能指定键入'void \ Destructor’

类型记录:键入'Promise<void>‘不能指定键入'void \ Destructor’
EN

Stack Overflow用户
提问于 2022-05-13 18:42:10
回答 2查看 7.7K关注 0票数 3

编辑正在显示

类型‘允诺’不能被分配到键入'void \ Destructor‘。

对于checkUserLoggedIn()调用useEffect。

我可以通过执行checkUserLoggedIn:any来摆脱它

不过,也许这不是解决这件事的最理想的方法.

如果我做了checkUserLoggedIn:error,那么我会得到一个不同的错误:

此表达式不可调用。输入“承诺”没有呼叫签名。

这不是我想要的.我希望它是可调用的.我正在将我的javascript文件转换成类型记录.

代码语言:javascript
复制
useEffect(() => checkUserLoggedIn(), [])

    // Check if user is logged in
    const checkUserLoggedIn = async () => {
        console.log('checkUserLoggedIn')

        const res = await fetch(`${NEXT_URL}/api/user`)
        const data = await res.json()

        if (res.ok) {
            setUser(data.user)

            console.log('data.user', data.user)
            router.push('/account/dashboard')
        } else {
            setUser(null)
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-13 18:58:25

用您所描述的方式编写的箭头函数隐式地返回函数的值。例如,这个函数() => 4返回值4。相反,当您将其包装在块中时,必须显式定义返回值:() => { 4; }此函数不返回任何内容。

在您的示例中,您传递的是一个匿名箭头函数,该函数隐式返回异步函数的结果,这是一个承诺。

要解决这个问题,请将传递给useEffect的函数的内容封装在一个块中:

代码语言:javascript
复制
useEffect(() => {
  checkUserLoggedIn();
}, []);
票数 4
EN

Stack Overflow用户

发布于 2022-05-14 13:27:21

代码语言:javascript
复制
    useEffect(() => {
        checkUserLoggedIn()
    }, [])

    // Check if user is logged in
    const checkUserLoggedIn:() => Promise<void> = async () => {
        console.log('checkUserLoggedIn')

        const res = await fetch(`${NEXT_URL}/api/user`)
        const data = await res.json()

        if (res.ok) {
            setUser(data.user)

            console.log('data.user', data.user)
            router.push('/account/dashboard')
        } else {
            setUser(null)
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72234152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档