未定义不是函数(评估't.map(function(t){return u(t)})')

时间:2018-11-16 14:41:50

标签: javascript reactjs react-native babeljs

“未定义的不是函数”可能是一个普遍提出的问题。但是我找不到解决这里确切问题的方法。

我的代码如下:

如何在出现问题的地方调用函数

...
service.queryListToInfoList(response.data || []);
...

在使用中,

export const queryListToInfoList = queryList => queryList.map(ql => queryToInfo(ql));

export const queryToInfo = query => { //some process; return {..}};

package.json

"dependencies": {
    ...
    "react": "16.5.1",
    "react-native": "^0.57.1"
    ...
 },
 "devDependencies": {
    ...
    "@babel/core": "^7.1.0",
    "@babel/plugin-external-helpers": "^7.0.0",
    "babel-core": "^7.0.0-0",
    "babel-preset-env": "^1.7.0",
    "metro-react-native-babel-preset": "^0.45.0"
    ...
 }

.babelrc

{
  "presets": ["module:metro-react-native-babel-preset"]
}

最后,我从一些不同的设备上获得了一些错误日志:

  

“未定义不是函数(正在评估't.map(function(t){return u(t)})')”),表示“ queryListToInfoList”函数。但总的来说,它是可行的。

queryList始终是一个数组。 (response.data)

这可能是导致问题的原因?

预先感谢

更新

深入研究,我发现所有这些错误日志都有一些共同之处。 Android意图(例如POWER_DISCONNECTED,RINGER_MODE_CHANGED,CONFIGURATION_CHANGED)之后发生此当机。

2 个答案:

答案 0 :(得分:0)

这听起来很傻,您是否尝试将queryListToInfoList导入为 import {queryListToInfoList} from './path_to service'import queryListToInfoList from './path_to service'。我已经看到这些错误通常是在错误输入的情况下发生的

答案 1 :(得分:0)

一段时间后,我发现了问题。发生这种情况是因为有时apisauce / axios无法正确解析response.data。因此,它不是对象而是传递字符串,其余的在引用string.map()时会引发错误。

这是问题axios parse error

作为一种解决方法,我在设置response.data之前添加了类型检查,所以现在就像在api调用之后一样:

if(response.ok && typeof response.data === 'object'){
  dispatch(setData(response.data || []));
}

请注意,仅当预期数据实际上是对象类型时,这才可以。