Чтобы быстро заставить его работать, вы можете просто сделать что-то вроде:
function mapStateToProps(state) {
const employees = state.firestore.ordered.employees;
const schedules = employees
? employees.map(employee => ({
id: employee.id,
name: {
first: employee.name.first,
last: employee.name.last
},
schedule: [null, null, null, null, null, null, null]
}))
: undefined;
const rota = {
id: null,
date: moment(),
notes: null,
events: [null, null, null, null, null, null, null],
published: null,
body: schedules
};
return { rota }
}
Затем, в своем компоненте, вы можете проверить атрибут расписаний объекта ротации и, если он все еще не определен, визуализировать что-то, чтобы указать, что данные еще не загружены.
Тем не менее, введение такой сложной логики в mapStateToProps
является для меня антипаттерном. Вы можете использовать шаблон селектора, чтобы сделать ваш код более организованным.
У меня была пара различных версий библиотеки по пути к классу (JBPM). С оберткой можно использовать подстановочные знаки для включения банок. Будьте осторожны с этим, хотя, поскольку можно случайно включать больше, чем Вы, должен.
Вот статья IBM, которая дает информацию об отладке, зависает в Java. Это в основном говорит, что существует две вещи, которые могут вызвать, зависает:
С тех пор я должен был отладить другие проблемы зависания. На Linux можно отправить JVM сигнал ВЫХОДА заставить его сделать дамп потока к консоли. Это действительно помогает выяснению, где проблема. Используйте эту команду, чтобы сделать это: уничтожьте - ВЫХОД
Редактирование 13.06.2017
В эти дни я использую jmap, включенный в JDK для дампа всей памяти программы. Затем я использую Память Eclipse Анализатор для наблюдения точного состояния программы, когда это отказало. Можно посмотреть на список потоков, которые активны и затем осматривают переменные в каждом стековом фрейме.
/usr/java/latest/bin/jmap -dump:file=/tmp/app-crash.hprof <PID>
Где PID является идентификатором процесса процесса Java.
Читайте на wrapper.ping.timeout свойстве. Программное обеспечение обертки общается с Вашей JVM время от времени, чтобы удостовериться, что это живо. Если та коммуникация перестала работать по любой причине, обертка считает процесс подвешенным и пытается перезапустить его.
В зависимости от того, как проектируется Ваше приложение, Ваша JVM могла бы быть занятой, обработав что-то еще, когда обертка пытается "проверить с помощью ping-запросов" его.
Посмотрите, можно ли использовать Визуальный VM для наблюдения то, что продолжается. Имейте Визуальный монитор VM приложение в течение всего времени и когда это прекращает работать, возможно, можно определить что не так.
Если VM зависает, можно получить состояние потоков... Я думаю, что Визуальный VM сделает это немного легче, учитывая Вашу установку, чем обычный ctrl-break (или whatver, который ключевая комбинация).
(Редактирование на основе комментария)
Попробованный это. В прошлый раз это подвесило количество потоков, и используемый объем памяти были довольно низкими, таким образом, ни один из тех не вызывает проблему. К сожалению после того, как это зависает, и обертка завершает его, Вы не можете получить дамп потока.
Есть ли какой-либо способ, которым можно выполнить его без обертки для отладки его? Также при использовании профилировщика NetBeans, это могло бы дать Вам шанс иметь дело с ним, когда это остановится (я буду проверять позже сегодня и видеть, могу ли я узнать, вело ли это себя по-другому).
В какой среде Вы? ОС, версия JVM, аппаратная архитектура?
Это действительно походит на ошибку, и, учитывая, что требуется много часов, это походит на какую-то ошибку исчерпания ресурса.