В Javascript, как мне заставить объект Audio повторно / рекурсивно перезагружаться при ошибке? - PullRequest
0 голосов
/ 01 августа 2020

Я делаю программное обеспечение, которое полагается на потоковую передачу звука с URL-адреса для файлов, хранящихся на Google Диске, которые будут отключаться по таймауту и ​​выходить из строя примерно через 5 минут простоя. Когда это произойдет, я хотел бы, чтобы звуковая ссылка обновлялась sh, а также устанавливала время там, где раньше был звук.

Чтобы изложить идею, см. Пример кода ниже:

export default class ReloadingAudio {
    constructor(url) {
        this.audio = new Audio(url)
        this.audio.onerror = () => {
            this.audio = new Audio(url)
        }
    }
}

Это отлично работает для перезагрузки звука в первый раз, но поскольку второй созданный новый звук не имеет функции onerror, когда он снова истекает, он не перезагружается.

Мне было интересно, хорошо , во-первых, есть ли способ предотвратить тайм-аут звука в файлах диска Google в первую очередь (это превращается в запрещенную ошибку 403), и в этом случае мне не нужно этого делать, а во-вторых, есть ли хороший способ рекурсивно определить функцию onerror таким образом, чтобы независимо от того, сколько раз истечет время ожидания звука, он будет многократно перезагружаться?

Спасибо!

Edit

Хотел добавить, я нашел решение для этого, но я попытался просто изменить AudioElement sr c, и это было одинаково эффективным решением (и я думаю, что лучше для целей памяти). Однако, для любопытных, вот способ рекурсивного сброса звука, вы можете определить функцию следующим образом:


export default class ReloadingAudio {
    constructor(url) {
        this.audio = new Audio(url)

        const self = this

        function onerrorFunction() {
            self.audio = new Audio(url)
            self.audio.onerror = onerrorFunction
        }

        this.audio.onerror = onerrorFunction
    }
}

1 Ответ

0 голосов
/ 02 августа 2020

Я не знаю, как предотвратить тайм-ауты, вызванные Google Диском, но вы можете добиться желаемого поведения, переустановив src на url на существующем AudioElement.

this.audio.onerror = () => {
    this.audio.src = url;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...