/
githubmr
/
facebook-react
Обзор
Документация
Войти
/
githubmr
/
facebook-react
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
status
packages/scheduler/src/TracingSubscriptions.js
171 строка
4 KB
Maksim Markelov
Fix circular dependency in TracingSubscriptions (#13689)
19 сен 2018, 20:48
19 сен 2018, 20:48
e1a067d
Код
Авторство
О чём код?
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import type {Interaction, Subscriber} from './Tracing'; import {enableSchedulerTracing} from 'shared/ReactFeatureFlags'; import {__subscriberRef} from './Tracing'; let subscribers: Set<Subscriber> = (null: any); if (enableSchedulerTracing) { subscribers = new Set(); } export function unstable_subscribe(subscriber: Subscriber): void { if (enableSchedulerTracing) { subscribers.add(subscriber); if (subscribers.size === 1) { __subscriberRef.current = { onInteractionScheduledWorkCompleted, onInteractionTraced, onWorkCanceled, onWorkScheduled, onWorkStarted, onWorkStopped, }; } } } export function unstable_unsubscribe(subscriber: Subscriber): void { if (enableSchedulerTracing) { subscribers.delete(subscriber); if (subscribers.size === 0) { __subscriberRef.current = null; } } } function onInteractionTraced(interaction: Interaction): void { let didCatchError = false; let caughtError = null; subscribers.forEach(subscriber => { try { subscriber.onInteractionTraced(interaction); } catch (error) { if (!didCatchError) { didCatchError = true; caughtError = error; } } }); if (didCatchError) { throw caughtError; } } function onInteractionScheduledWorkCompleted(interaction: Interaction): void { let didCatchError = false; let caughtError = null; subscribers.forEach(subscriber => { try { subscriber.onInteractionScheduledWorkCompleted(interaction); } catch (error) { if (!didCatchError) { didCatchError = true; caughtError = error; } } }); if (didCatchError) { throw caughtError; } } function onWorkScheduled( interactions: Set<Interaction>, threadID: number, ): void { let didCatchError = false; let caughtError = null; subscribers.forEach(subscriber => { try { subscriber.onWorkScheduled(interactions, threadID); } catch (error) { if (!didCatchError) { didCatchError = true; caughtError = error; } } }); if (didCatchError) { throw caughtError; } } function onWorkStarted(interactions: Set<Interaction>, threadID: number): void { let didCatchError = false; let caughtError = null; subscribers.forEach(subscriber => { try { subscriber.onWorkStarted(interactions, threadID); } catch (error) { if (!didCatchError) { didCatchError = true; caughtError = error; } } }); if (didCatchError) { throw caughtError; } } function onWorkStopped(interactions: Set<Interaction>, threadID: number): void { let didCatchError = false; let caughtError = null; subscribers.forEach(subscriber => { try { subscriber.onWorkStopped(interactions, threadID); } catch (error) { if (!didCatchError) { didCatchError = true; caughtError = error; } } }); if (didCatchError) { throw caughtError; } } function onWorkCanceled( interactions: Set<Interaction>, threadID: number, ): void { let didCatchError = false; let caughtError = null; subscribers.forEach(subscriber => { try { subscriber.onWorkCanceled(interactions, threadID); } catch (error) { if (!didCatchError) { didCatchError = true; caughtError = error; } } }); if (didCatchError) { throw caughtError; } }