Nils Graustiņš Posted January 21 Report Share Posted January 21 Problēma: atveram async socket un sākam sūtīt datus. var isRecording; // globāls Kamēr sockets ir vaļā, viss notiek. async function startAudioRecording(ws) { // ... } function streamStart() { isRecording = true; $(".mice").addClass('recording'); const ws = new WebSocket(url); ws.onopen = async () => { const authPayload = JSON.stringify({ "appID": AppId, "timestamp": timeStamp, "appKey": appKey, }); ws.send(authPayload); startAudioRecording(ws); }; socketInterval = setInterval(() => { if (isRecording === false)// un te ir gļuks - nav false pēc stop() // { if (recorder.state !== 'inactive') { recorder.stop(); recorder.clear(); stream.getTracks().forEach(track => track.stop()); ws.close(); } } },500); ws.onmessage = function (event) { // ... } } Tagad UI uzdevums ir pateikt stop(); No UI izpilda: function streamStop(){ isRecording = false; // etc. } Bet async pa to laiku griežas un cik jūtu, viņam ir pie kājas, ka kāds tur variablis ir nomainīts sinhronā metodē. Reizēm izpildas, reizēm nē. Ir sajūta, ka randomā ja trāpa tad izpildas: isRecording === false. Ja atslēdz asinhrono daļu, viss notiek perfekti - streamStart(), streamStop(). Konsolē lieliski redzams strādājošs intervāls, kā apturas un atkal sākas. Nekādu kļūdu konsolē nav. Redzams, ka pēc streamStop() izsaukšanas intervāls turpinās un isRecording gļuka vietā ir true. Vai ir idejas? Quote Link to post Share on other sites
e-remit Posted January 22 Report Share Posted January 22 Neredzot pārējo, ir pāris lietas, kas no sākuma jāpārbauda - vai nu recorder.state == 'inactive', tāpēc otrais if's neizpildās, vai arī isRecording kaut kur vēl tiek pārrakstīts. Kā arī darbību secība - tas, ka kaut kas JS ir asinhrons, nenozīmē, ka tas tiek izpildīts asinhroni, jo JS tik un tā visu izpilda vienā pavedienā. Saliec logus, lai redzētu, kas kādā secībā tiek izpildīts, vai asinhronā daļa netiek aizkavēta dēļ kāda cita koda. Quote Link to post Share on other sites
Kasspars Posted January 23 Report Share Posted January 23 Kāpēc vispār izmanto async?? .onopen ir jābūt function() {} Palasi ko nozīmē async https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function Quote Link to post Share on other sites
Nils Graustiņš Posted January 26 Author Report Share Posted January 26 On 1/21/2021 at 10:16 PM, Nils Graustiņš said: Problēma: atveram async socket un sākam sūtīt datus. var isRecording; // globāls Kamēr sockets ir vaļā, viss notiek. async function startAudioRecording(ws) { // ... } function streamStart() { isRecording = true; $(".mice").addClass('recording'); const ws = new WebSocket(url); ws.onopen = async () => { const authPayload = JSON.stringify({ "appID": AppId, "timestamp": timeStamp, "appKey": appKey, }); ws.send(authPayload); startAudioRecording(ws); }; socketInterval = setInterval(() => { if (isRecording === false)// un te ir gļuks - nav false pēc stop() // { if (recorder.state !== 'inactive') { recorder.stop(); recorder.clear(); stream.getTracks().forEach(track => track.stop()); ws.close(); } } },500); ws.onmessage = function (event) { // ... } } Tagad UI uzdevums ir pateikt stop(); No UI izpilda: function streamStop(){ isRecording = false; // etc. } Bet async pa to laiku griežas un cik jūtu, viņam ir pie kājas, ka kāds tur variablis ir nomainīts sinhronā metodē. Reizēm izpildas, reizēm nē. Ir sajūta, ka randomā ja trāpa tad izpildas: isRecording === false. Ja atslēdz asinhrono daļu, viss notiek perfekti - streamStart(), streamStop(). Konsolē lieliski redzams strādājošs intervāls, kā apturas un atkal sākas. Nekādu kļūdu konsolē nav. Redzams, ka pēc streamStop() izsaukšanas intervāls turpinās un isRecording gļuka vietā ir true. Vai ir idejas? Otrais if() ir tikai tāpēc, lai plūsmu neslēgtu pie neatbilstoša statusa un nerastos kļūda. Ne tajā ir problēma. Quote Link to post Share on other sites
e-remit Posted January 28 Report Share Posted January 28 On 1/26/2021 at 5:59 PM, Nils Graustiņš said: Otrais if() ir tikai tāpēc, lai plūsmu neslēgtu pie neatbilstoša statusa un nerastos kļūda. Ne tajā ir problēma. T.i. tu abās atbildēs atradi vienu vietu, kas neatbilst tavam kodam, bet pārējo nolēmi izlaist? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.