Я работаю с различными компонентами, где 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;