2017-10-04 60 views
0

以下语法怪(的WebPack?)错误 “类型错误:对象(...)不是一个函数”

const INITIAL_STATE = { 
    userIsActive: getAccount() ? getAccount().status === "open" : false 
}; 

原因浏览器扔TypeError: Object(...) is not a function错误,我把它精确定位到是特定的语法,getAccount()刚刚返回类似

{ 
    status: "open" 
} 

对象更改为这个工作完全正常,甚至返回正确的数据

const accStatus =() => { 
    try { 
    return getAccount() ? getAccount().status === "open" : false; 
    } catch (e) { 
    console.error(e); 
    return false; 
    } 
}; 

const INITIAL_STATE = { 
    userIsActive: accStatus 
}; 

但我不明白为什么它不起作用?

编辑:即catch语句不被触发,这是奇数

+0

你可以显示'getAccount'代码? –

回答

1

在第一示例中,userIsActive是一个布尔值,而在第二个例子中它是一个返回布尔函数。这可能会工作:

const INITIAL_STATE = { 
    userIsActive:() => getAccount() ? getAccount().status === "open" : false 
}; 
+0

'userIsActive'应该解析为由该三元返回的布尔值,所以我假定它需要执行,这就是为什么我没有包装它其他函数 – Ilja

+0

考虑到错误消息和第二个示例工作的事实,它看起来像代码期望'userIsActive'不是一个布尔值,而是一个thunk(即延迟实际计算值直到你调用它的函数)。这样,你可以通过调用'state.userIsActive()'来检查用户是否处于活动状态,否则'state.userIsActive'将表示用户是否在应用程序初始化时处于活动状态。 – Oblosys

相关问题