Это может быть связано с тем, что функция уровня вашего провайдера (dataContextProvider
) getData
имеет то же пространство имен, что и ваша функция, которую вы импортируете из ../Api
.
И затем я считаю, что когда следующая строка const data = await getData();
выполняется в блоке кода ниже, она на самом деле вызывает функцию провайдеров getData
, вызывая тем самым цикл.
async getData() {
this.setState({ requestStatus: RequestStatus.RUNNING });
try {
const data = await getData();
this.setState({ data, requestStatus: RequestStatus.INACTIVE });
} catch (error) {
this.setState({ requestStatus: RequestStatus.FAILED });
}
}
Как Вы уже заявили, можно сделать ту же самую вещь с publisher-subscriber/Observer шаблоном. Просто требуется немного больше работы, требующей беготни.
И не, Java не имеет собственной поддержки событий, как C# делает с делегатами.
Из того, что я помню Java (не работали с ним в> 6 месяцев), я не думаю, что существует крыло событий.NET. Ваш лучший выбор будет состоять в том, чтобы, вероятно, использовать шаблон издателя/подписчика. Довольно легко реализовать и довольно надежный.
Вы могли бы также хотеть смотреть на библиотеку EventBus с открытым исходным кодом, которая, наоборот к стандартному шаблону издателя/подписчика использует класс посредника (шина события) для сокращения плотного соединения, требуемого в шаблоне издателя/подписчика (где подписчики должны знать обо всех издателях для регистрации им, который является не всегда возможным и является часто громоздким).
Я использовал его в приложениях GUI, но это может иметь дело с любыми видами события.
Swing или AWT, которые являются Java инструментарии UI, оба события дескриптора - проверяют официальное учебное руководство по событию Swing для примеров. Необходимо будет записать UI в Swing, конечно, чтобы смочь зарегистрировать слушателей для этих событий.
Вам нужны потоки. GUI в Java имеет события, потому что существует специализированный поток для событий UI для диспетчеризации. Существует также что-то улица "Observer" и "Заметный" (это - вкус нейтральная версия слушателей события от материала GUI), но просто шаблон разработки...
Подписываться/Публиковать механизм, предложенный другими здесь, позволит Вам реализовать синхронные события. Для асинхронных циклов событий (запускают и забывают) можно хотеть посмотреть на "агентов". Actor<A>
состоит из обработчика для сообщений (события) типа A, а также стратегия поточной обработки выполнения обработчика. Это позволяет Вам сделать параллельную, асинхронную обработку событий как следующее:
public class EventExample {
public static void main(String[] args) {
while ((char c = System.in.read()) >= 0) {
eventHandler.act(c);
}
}
public static Actor<Character> eventHandler =
Actor.actor(Strategy.simpleThreadStrategy(), new Effect<Character>() {
public void e(Character c) {
// Do something with c here.
}
});
}
Получите библиотеку агентов здесь. Посмотрите Javadoc здесь.
Я не хорошо осведомлен о C#, но Бобы Java, которые не являются компонентами UI, могут, конечно, уведомить Слушателей о Событиях использования изменений состояния:
http://java.sun.com/developer/onlineTraining/Beans/beans02/
Это было частью Бобовой спецификации Java, так как она сначала вышла. Отметьте дату на учебном руководстве: это - год изготовления вина 2000.
Источник и слушатель должны работать в той же JVM. Необходимо было бы использовать прокси для общения с чем-то работающим в другой JVM, но она могла быть сделана.
Я Погугленный для учебного руководства по событиям C# и найденный этим. Регистрация Java слушателей и увольнение свойства изменились, события напоминало о том, что я видел, когда я просмотрел учебное руководство C#. Я пропускал что-то важное? (Я признаю, что не читал глубоко - никакое время прямо сейчас.)
Нет никакой собственной поддержки в Java - необходимо будет реализовать Шаблон The Observer (иначе Subcribe/Publish). Его довольно прямое - не больше, чем дюжина строк кода.
Вот статья по теме, также см. Какая библиотека / фреймворк модели акторов для Java?