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文件以前已经加载过,它至少不会加载它