diff --git a/packages/loader/src/AudioLoader.ts b/packages/loader/src/AudioLoader.ts index d50b7df2cf..24c2b788c9 100644 --- a/packages/loader/src/AudioLoader.ts +++ b/packages/loader/src/AudioLoader.ts @@ -19,27 +19,32 @@ class AudioLoader extends Loader { type: "arraybuffer" }; - // @ts-ignore - resourceManager._request(url, requestConfig).then((arrayBuffer) => { - const audioClip = new AudioClip(resourceManager.engine); + resourceManager // @ts-ignore - AudioManager.getContext() - .decodeAudioData(arrayBuffer) - .then((result: AudioBuffer) => { - // @ts-ignore - audioClip._setAudioSource(result); + ._request(url, requestConfig) + .then((arrayBuffer) => { + const audioClip = new AudioClip(resourceManager.engine); + // @ts-ignore + AudioManager.getContext() + .decodeAudioData(arrayBuffer) + .then((result: AudioBuffer) => { + // @ts-ignore + audioClip._setAudioSource(result); - if (url.indexOf("data:") !== 0) { - const index = url.lastIndexOf("/"); - audioClip.name = url.substring(index + 1); - } + if (url.indexOf("data:") !== 0) { + const index = url.lastIndexOf("/"); + audioClip.name = url.substring(index + 1); + } - resolve(audioClip); - }) - .catch((e) => { - reject(e); - }); - }); + resolve(audioClip); + }) + .catch((e) => { + reject(e); + }); + }) + .catch((e) => { + reject(e); + }); }); } } diff --git a/tests/src/core/audio/AudioSource.test.ts b/tests/src/core/audio/AudioSource.test.ts index 49e12dd3fd..875c8035d1 100644 --- a/tests/src/core/audio/AudioSource.test.ts +++ b/tests/src/core/audio/AudioSource.test.ts @@ -54,6 +54,7 @@ describe("AudioSource", () => { audioSource.stop(); audioSource.play(); + // @ts-ignore if (AudioManager.isAudioContextRunning()) { expect(audioSource.isPlaying).to.be.true; } else { @@ -70,4 +71,19 @@ describe("AudioSource", () => { expect(cloneAudioSource.loop).to.be.equal(audioSource.loop); expect(cloneAudioSource.mute).to.be.equal(audioSource.mute); }); + + it("load error - network request fails with 404", async () => { + let errorCaught = false; + try { + await engine.resourceManager.load({ + url: "invalid_url", + type: AssetType.Audio + }); + expect.fail("Should throw error for 404"); + } catch (error) { + errorCaught = true; + expect(error).to.exist; + } + expect(errorCaught).to.be.true; + }); });