Nils Graustiņš Posted January 21, 2021 Report Share Posted January 21, 2021 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 comment Share on other sites More sharing options...
e-remit Posted January 22, 2021 Report Share Posted January 22, 2021 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 comment Share on other sites More sharing options...
Kasspars Posted January 23, 2021 Report Share Posted January 23, 2021 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 comment Share on other sites More sharing options...
Nils Graustiņš Posted January 26, 2021 Author Report Share Posted January 26, 2021 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 comment Share on other sites More sharing options...
e-remit Posted January 28, 2021 Report Share Posted January 28, 2021 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 comment Share on other sites More sharing options...
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.