Я не совсем уверен, что правильно вас понял, но если вы хотите воспроизвести список только один раз за клик, вы можете реализовать это поведение двумя способами:
Первый, создайте флаг, который показывает статус воспроизведения для текущего пользователя.
// On top of your file
let playing = false;
socket.on('connect', function () {
window.autoPlay = true;
socket.on('sound-emit', async (data) => {
// check if player already playing the music
if (playing) {
return;
}
// Player not playing, so change status for further invocations prevent
playing = true;
let counter = 1;
for (let elem of data.text) {
await new Promise(resolve => {
setTimeout(function () {
const audio = main_url + element + '.wav';
const sound = new Howl({
src: [audio],
onend: function () {
console.log('Finished!');
counter += 1;
resolve();
},
});
sound.play();
}, counter * 2000);
});
}
})
});
Или с очередью, в которой вы сохраняете действие воспроизведения при каждом нажатии, а затем проверяете эту очередь.