Javascript 如何检查特定模块是否已添加到工作集?

Javascript 如何检查特定模块是否已添加到工作集?,javascript,web-audio-api,audio-worklet,worklet,Javascript,Web Audio Api,Audio Worklet,Worklet,我正在使用AudioWorkletNode,要使用它,需要首先在audio\u context.audioWorklet上加载处理器模块 DOMException: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: AudioWorklet does not have a valid AudioWorkletGlobalScope. Load a script via audioWorklet.

我正在使用
AudioWorkletNode
,要使用它,需要首先在
audio\u context.audioWorklet
上加载处理器模块

DOMException: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: AudioWorklet does not have a valid AudioWorkletGlobalScope. Load a script via audioWorklet.addModule() first.


由于我的代码的模块化性质,我需要一种可靠的方法来防止处理器模块不必要的多次加载;如果已对给定的
音频上下文添加模块,则不要添加模块。除了
try
-
catch
AudioContext
对象上添加和标记之外,还有其他方法吗?

假设您已将处理器命名为
my processor
,并且
AudioWorkletProcessor
的定义在某种程度上如下所示:

class MyProcessor extends AudioWorkletProcessor {

    process () {
        return true;
    }

}

registerProcessor('my-processor', MyProcessor);
要检查处理器是否已加载,可以在主线程中执行以下操作:

// somewhere inside of an async function ...

let audioWorkletNode;

try {
    audioWorkletNode = new AudioWorkletNode(audioContext, 'my-processor');
} catch (err) {
    await audioContext.audioWorklet.addModule('./worklet.js');

    audioWorkletNode = new AudioWorkletNode(audioContext, 'my-processor');
}
代码正在使用一个
try
/
catch
块,但是如果JS文件以前已经加载过,它至少不会加载它