From 3b5d2945e2d50996ec6ad80265749f37cefc330b Mon Sep 17 00:00:00 2001 From: Kbscript Date: Thu, 9 May 2024 18:10:22 +0800 Subject: [PATCH] Replace `throw` with `console.error` to prevent blocking the main thread (#2077) * chore: replace throw with console.error to prevent blocking the main thread --- packages/core/src/shader/Shader.ts | 6 ++++-- tests/src/core/Shader.test.ts | 7 ++++--- tests/src/shader-lab/ShaderLab.test.ts | 7 ++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/core/src/shader/Shader.ts b/packages/core/src/shader/Shader.ts index b757a9fb2..b3ca43fd9 100644 --- a/packages/core/src/shader/Shader.ts +++ b/packages/core/src/shader/Shader.ts @@ -91,7 +91,8 @@ export class Shader implements IReferable { const shaderInfo = Shader._shaderLab.parseShader(nameOrShaderSource); if (shaderMap[shaderInfo.name]) { - throw `Shader named "${shaderInfo.name}" already exists.`; + console.error(`Shader named "${shaderInfo.name}" already exists.`); + return; } const subShaderList = shaderInfo.subShaders.map((subShaderInfo) => { const passList = subShaderInfo.passes.map((passInfo) => { @@ -136,7 +137,8 @@ export class Shader implements IReferable { return shader; } else { if (shaderMap[nameOrShaderSource]) { - throw `Shader named "${nameOrShaderSource}" already exists.`; + console.error(`Shader named "${nameOrShaderSource}" already exists.`); + return; } if (typeof vertexSourceOrShaderPassesOrSubShaders === "string") { const shaderPass = new ShaderPass(vertexSourceOrShaderPassesOrSubShaders, fragmentSource); diff --git a/tests/src/core/Shader.test.ts b/tests/src/core/Shader.test.ts index 90a3d953b..6180bc9be 100644 --- a/tests/src/core/Shader.test.ts +++ b/tests/src/core/Shader.test.ts @@ -29,9 +29,10 @@ describe("Shader", () => { customShader = Shader.create("custom", [new SubShader("Default", [new ShaderPass(customVS, customFS)])]); // Create same name shader - expect(() => { - Shader.create("custom", [new SubShader("Default", [new ShaderPass(customVS, customFS)])]); - }).throw(); + const errorSpy = chai.spy.on(console, "error"); + Shader.create("custom", [new SubShader("Default", [new ShaderPass(customVS, customFS)])]); + expect(errorSpy).to.have.been.called.with('Shader named "custom" already exists.'); + chai.spy.restore(console, "error"); // Create shader by empty SubShader array expect(() => { diff --git a/tests/src/shader-lab/ShaderLab.test.ts b/tests/src/shader-lab/ShaderLab.test.ts index afbdbd672..92d7a4cba 100644 --- a/tests/src/shader-lab/ShaderLab.test.ts +++ b/tests/src/shader-lab/ShaderLab.test.ts @@ -228,8 +228,13 @@ describe("ShaderLab", () => { const shaderInstance = Shader.create(demoShader); expect(shaderInstance).instanceOf(Shader); - expect(Shader.create.bind(null, demoShader)).to.throw('Shader named "Gem" already exists.'); + + const errorSpy = chai.spy.on(console, "error"); + Shader.create(demoShader); + expect(errorSpy).to.have.been.called.with('Shader named "Gem" already exists.'); shaderInstance.destroy(); + chai.spy.restore(console, "error"); + const sameNameShader = Shader.create(demoShader); expect(sameNameShader).instanceOf(Shader); });