如何解决完成后不可见异步方法的副作用
以下类具有一个AudioContext,该音频上下文已在start方法中初始化,但在调用stop方法时始终未定义。
export class PitchDetector {
private audioCtx?: AudioContext;
public async start(onPitchDetected: (frequency: Frequency) => void): Promise<void> {
this.audioCtx = new AudioContext();
const stream = await navigator.mediaDevices.getUserMedia({
audio: { sampleRate: sampleRate },});
const streamSource = this.audioCtx.createmediastreamsource(stream);
const scriptprocessor = this.audioCtx.createscriptprocessor(bufferSize);
scriptprocessor.onaudioprocess = onAudioProcess.bind(undefined,onPitchDetected);
streamSource.connect(scriptprocessor);
scriptprocessor.connect(this.audioCtx.destination);
}
public async stop() {
await this.audioCtx!.close();
}
}
export const Something: React.FC<Props> = (props) => {
// ...
let pitchDetector = new PitchDetector();
// ...
async function keyboardOnClick(octave: number,key: Key) {
await pitchDetector.start(setFrequency);
// ...
}
async function onFrequencyInput(freq: Frequency) {
await pitchDetector.stop(); // <- Here it fails.
// ...
}
return <SomeComponents/>
}
我无法共享完整的代码,但是要点是keyboardOnClick
是一个onclick处理程序,如果检测到某些频率,则会调用onFrequencyInput。它始终以TypeError
,Cannot read property 'close' of undefined
失败。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。