From e1cc8b88295c2dbe2a497f2b72b00ca345f77853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lerique?= Date: Tue, 15 Sep 2015 15:24:09 +0200 Subject: [PATCH] Use a promise to gather the recorded data `click` is when we know if we should use the recorded data or discard it, but `click` fires after `touchend`. So to avoid stopping the recording and registering `ondataavailable` afterwards, register a promise on `ondataavailable`, and gather the data if needed in `click`. --- app/js/directives.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index bf9f4837..bbde5aad 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1454,6 +1454,7 @@ angular.module('myApp.directives', ['myApp.filters']) var stickerImageCompiled = $compile(''); var cachedStickerImages = {}; var audioRecorder = null; + var audioPromise = null; var audioStream = null; var emojiTooltip = new EmojiTooltip(emojiButton, { @@ -1595,7 +1596,7 @@ angular.module('myApp.directives', ['myApp.filters']) if (audioRecorder) { $scope.$parent.$parent.voiceRecorder.processing = true; - audioRecorder.ondataavailable = function(e){ + audioPromise.then(function(e) { var blob = e.data; console.log(blob); @@ -1604,12 +1605,16 @@ angular.module('myApp.directives', ['myApp.filters']) audioRecorder = null; $scope.$parent.$parent.voiceRecorder.processing = false; - } + }); } }); $($window).on('touchend', function(){ if (audioRecorder) { + audioPromise = new Promise(function(resolve) { + audioRecorder.ondataavailable = resolve; + }); + audioRecorder.stop(); audioStream.stop();