undefined не является функцией (оценивает 't.map (function (t) {return u (t)})') - PullRequest
0 голосов
/ 16 ноября 2018

"undefined не является функцией", вероятно, является широко задаваемым вопросом.Но я не смог найти решение именно той проблемы, которая у меня есть.

Мой код выглядит следующим образом:

Как я вызываю функцию при возникновении проблемы:

...
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"]
}

В конце я получаю несколько журналов ошибок от нескольких различных устройств, говорящих:

«undefined не является функцией (оценивающей функцию« t.map (function (t) {return u (t)}) »)»), указывающей на функцию «queryListToInfoList».Но в целом это работает.

queryList всегда массив.(response.data)

Что может быть причиной проблемы здесь?

Заранее спасибо

Обновление:

Копая еще немного, я понимаю, что во всех этих журналах ошибок есть что-то общее.Этот сбой происходит после намерения Android, например: POWER_DISCONNECTED, RINGER_MODE_CHANGED, CONFIGURATION_CHANGED.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Через некоторое время я обнаружил проблему.Это происходит потому, что иногда apisauce / axios не может правильно проанализировать response.data.Таким образом, вместо объекта он передает строку, а остальное выдает ошибку при обращении к string.map ()

Вот проблема Ошибка разбора axios

В качестве обходного пути я добавилпроверка типов перед установкой response.data, поэтому теперь это похоже на следующие действия после вызовов API:

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

Осторожно, это должно быть хорошо, только если ожидаемые данные на самом деле являются объектными типами.

0 голосов
/ 16 ноября 2018

это может звучать глупо, вы пытались импортировать queryListToInfoList как import {queryListToInfoList} from './path_to service' или import queryListToInfoList from './path_to service'.я видел, как эти ошибки обычно происходят при неправильном импортировании

...