你如何在 JavaScript 中创建一个等待函数,让你可以在后台运行音频之类的东西?

Posted

技术标签:

【中文标题】你如何在 JavaScript 中创建一个等待函数,让你可以在后台运行音频之类的东西?【英文标题】:How do you create a wait function in JavaScript that allows you to run things in the background like audio? 【发布时间】:2015-02-09 03:40:15 【问题描述】:

我将其创建为一个简单的等待脚本,但它最多只能将整个脚本冻结 time 秒。

function wait(time)

var x = 0;
var y = time * 500000000;
while (x<y)

x++


我需要的是一个可以延迟脚本的代码,以便我可以播放声音,因为我的脚本循环并且有大量的警报,所以在脚本结束之前不会播放声音。

这是我用来播放声音的脚本:

<div id="dummy"></div>

<script type="text/javascript">
function playSound(sound)

if (sound==1)

document.getElementById("dummy").innerhtml = '<embed type="audio/mp3" src="http://www.myinstants.com/media/sounds/sound-8.mp3" autoplay="true" hidden="true"   loop="false">';


</script>

是的,我在另一个脚本中调用了 playSound(1)

【问题讨论】:

【参考方案1】:

如果不完全冻结 UI,就无法在 Javascript 中创建阻塞(即强制调用者等待它完成)的函数。

查看setTimeout、回调和可能的 Promise 作为异步执行这些操作的方法。

https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout http://www.html5rocks.com/en/tutorials/es6/promises/

【讨论】:

虽然有一个问题,该函数是在 WHILE 语句中调用的,所以我唯一能做的就是什么都不做。如果我使用setTimeout,它只会延迟参数是什么(例如:setTimeout(function()playSound(1);,2000)只会延迟playSound(1))因此,while语句将继续并且会有没有什么可以延迟它,所以声音会继续。【参考方案2】:

如果我没听错,我相信你会想使用 setTimeout 方法。 你可以阅读更多关于它的信息here,在那里你会找到一些例子。

这里有点短

    <script>
    function myFunction() 
        setTimeout(playSound, 1000, sound);
    
and call it wherever you need
    </script>

【讨论】:

有没有办法让整个线程也等待,而不是在函数中发送其余的线程? nvm 有异步功能,你可以等待一个 promise 的解决

以上是关于你如何在 JavaScript 中创建一个等待函数,让你可以在后台运行音频之类的东西?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 selenium c# 中创建自定义显式等待函数,传入 WebElements 而不是 By

如何在JavaScript中创建CoffeeScript样式存在操作符?

如何在 QML 中创建延迟函数?

如何在 Javascript 中创建异步函数?

如何在 Javascript 中创建多维数组? [复制]

Dart,如何在你自己的函数中创建一个返回的未来?