The fourth line of the following code (produces the error SyntaxError: Unexpected keyword 'function'. Expected ')' to end a argument list.
is produced from babeljs.io. Can you fix the error? Here is a working jsfiddle of the original unbabeled code to use.
"use strict";
var recordAudio = function recordAudio() {
return new Promise(async function (resolve) {
var stream = await navigator.mediaDevices.getUserMedia({
audio: true
});
var mediaRecorder = new MediaRecorder(stream);
var audioChunks = [];
mediaRecorder.addEventListener("dataavailable", function (event) {
audioChunks.push(event.data);
});
var start = function start() {
return mediaRecorder.start();
};
var stop = function stop() {
return new Promise(function (resolve) {
mediaRecorder.addEventListener("stop", function () {
var audioBlob = new Blob(audioChunks);
var audioUrl = URL.createObjectURL(audioBlob);
var audio = new Audio(audioUrl);
var play = function play() {
return audio.play();
};
resolve({
audioBlob: audioBlob,
audioUrl: audioUrl,
play: play
});
});
mediaRecorder.stop();
});
};
resolve({
start: start,
stop: stop
});
});
};
var sleep = function sleep(time) {
return new Promise(function (resolve) {
return setTimeout(resolve, time);
});
};
var handleAction = async function handleAction() {
var recorder = await recordAudio();
var actionButton = document.getElementById('action');
actionButton.disabled = true;
recorder.start();
await sleep(3000);
var audio = await recorder.stop();
audio.play();
await sleep(3000);
actionButton.disabled = false;
};
The above code is produced by the following code "arrow function" version taken from Bryan Jennings
const recordAudio = () =>
new Promise(async resolve => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mediaRecorder = new MediaRecorder(stream);
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
const start = () => mediaRecorder.start();
const stop = () =>
new Promise(resolve => {
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks);
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
const play = () => audio.play();
resolve({ audioBlob, audioUrl, play });
});
mediaRecorder.stop();
});
resolve({ start, stop });
});
const sleep = time => new Promise(resolve => setTimeout(resolve, time));
const handleAction = async () => {
const recorder = await recordAudio();
const actionButton = document.getElementById('action');
actionButton.disabled = true;
recorder.start();
await sleep(3000);
const audio = await recorder.stop();
audio.play();
await sleep(3000);
actionButton.disabled = false;
}