Выполнить функцию после инициализации обоих объектов - PullRequest
0 голосов
/ 29 апреля 2020

Я работаю с различными компонентами, где OTSessionProvider инициализирует сеанс. OTPublisher публикует поток в инициализированном сеансе. Теперь мой вопрос касается function publish().

. Может случиться (?), Что издатель инициализируется перед сеансом и, следовательно, функция publish() не будет выполнена. Однако сессия будет готова через несколько секунд. Как я могу убедиться, что publish() вызывается после инициализации и готовности обоих объектов (сеанс и издатель)?

VideoStream. js

<OTSessionProvider>
    <OTPublisher completionHandler={completionHandler}>
        <div>[...]</div>
    </OTPublisher>
</OTSessionProvider>

OTSessionProvider. js

const OTSessionProvider = ({ children }) => {
  const [session, setSession] = useState();

  useEffectOnce(() => {
    let connectionCount = 0;
    const session = OT.initSession(apiKey, sessionId);


    // Replace token with your own value:
    session.connect(token, function (error) {
      if (error) {
        console.log("Unable to connect: ", error.message);
      } else {
        console.log("Connected to the session.");
        setSession(session);
      }
    });

    return () => {
      session.disconnect();
    };
  });

  return (
    <OTSessionContext.Provider value={session}>
      {children}
    </OTSessionContext.Provider>
  );
};

export default OTSessionProvider;

OTPublisher. js

const OTPublisher = ({ completionHandler }) => {
  let error;
  const session = useContext(OTSessionContext);
  const publisherProperties = { insertMode: "replace", showControls: false };
  const targetElement = "publisher";

  const publisher = OT.initPublisher(
    targetElement,
    publisherProperties,
    function (error) {
      if (error) {
        alert(error.message);
      } else {
        publish();
      }
    }
  );

  function publish() {
    if (session) {
      if (session.capabilities.publish === 1) {
        session.publish(
          publisher,
          completionHandler(error, "Publishing a stream.")
        );
      } else {
        console.log("You cannot publish an audio-video stream.");
      }
    }
  }

  return "[...]";
};

export default OTPublisher;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...