【发布时间】:2021-07-29 16:30:21
【问题描述】:
我有一个需要持续执行的 Javascript 任务。我有一个存储为缓冲区(audioBuffer)的音频文件列表,我想播放。但是,该列表中不断附加音频文件,因此我使用了一个 while 循环来监视它。我不断地得到第一个缓冲区,播放它的音频,然后将它出列。但是,当我运行此函数时,它会使我的浏览器挂起,即使循环位于异步包装器中。为什么是这样? async 不应该在很大程度上防止我的浏览器死机吗?
代码:
function playAudioQueue() {
const player = new Audio();
(async () => {
while (true) {
const audioBuffer = audioQueue[0];
if (audioBuffer) {
const base64Audio = base64Prefix + arrayBufferToBase64(audioBuffer);
player.src = base64Audio;
await player.play();
audioQueue.shift();
};
};
})();
};
【问题讨论】:
-
代码没有意义,你到底想完成什么。
-
@epascarello 我在帖子中说。我有一个存储为缓冲区的音频文件列表,我想播放。但是,该列表中会不断附加音频文件,因此我使用了一个 while 循环来监视它。
-
播放不是异步的,所以不确定你在期待什么。最好使用一个不同的模型,其中一个事件触发说添加了一些东西,如果你能做到这一点,你需要一种更好的方法来监控正在添加的东西,因为无限的 while 循环只会锁定浏览器。跨度>
标签: javascript loops asynchronous