异步JavaScript

文章介绍了JavaScript中的异步概念,通过setTimeout和setInterval函数展示了如何使用回调函数实现延迟或周期性执行。同时提到了异步编程的挑战以及现代JavaScript倾向于使用Promise来处理异步操作。

与其他函数并行运行的函数称为异步

一个很好的例子是 JavaScript setTimeout()

function myDisplayer(something) {
  document.getElementById("demo").innerHTML = something;
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myDisplayer);

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>Callback Functions</h2>

<p>The result of the calculation is:</p>
<p id="demo"></p>

<script>
function myDisplayer(something) {
  document.getElementById("demo").innerHTML = something;
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myDisplayer);
</script>

</body>
</html>

在上面的示例中, myDisplayer 是一个函数的名称。

它作为参数传递给 myCalculator() 。

等待超时

使用 JavaScript 函数 setTimeout() 时,可以指定超时时执行的回调函数:

setTimeout(myFunction, 3000);

function myFunction() {
  document.getElementById("demo").innerHTML = "I love You !!";
}

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>setTimeout() with a Callback</h2>

<p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>

<h1 id="demo"></h1>

<script>
setTimeout(myFunction, 3000);

function myFunction() {
  document.getElementById("demo").innerHTML = "I love You !!";
}
</script>

</body>
</html>

在上面的示例中, myFunction 用作回调。

myFunction 作为参数传递给 setTimeout() 。

3000 是超时前的毫秒数,所以 myFunction() 将在 3 秒后调用。

将函数作为参数传递时,切记不要使用括号。

始终可以传递整个函数,而不是将函数名称作为参数传递给另一个函数:

setTimeout(function() { myFunction("I love You !!!"); }, 3000);

function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>setInterval() with a Callback</h2>

<p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>

<h1 id="demo"></h1>

<script>
setTimeout(function() { myFunction("I love You !!!"); }, 3000);

function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}
</script>

</body>
</html>

在上面的示例中, function(){ myFunction("I love You !!!"); } 用作回调。它是一个完整的功能。完整的函数作为参数传递给 setTimeout()。

3000 是超时前的毫秒数,所以 myFunction() 将在 3 秒后调用。

 等待间隔:

使用 JavaScript 函数 setInterval() 时,可以指定每个时间间隔执行的回调函数:

setInterval(myFunction, 1000);

function myFunction() {
  let d = new Date();
  document.getElementById("demo").innerHTML=
  d.getHours() + ":" +
  d.getMinutes() + ":" +
  d.getSeconds();
}

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>setInterval() with a Callback</h2>

<p>Using setInterval() to display the time every second (1000 milliseconds).</p>

<h1 id="demo"></h1>

<script>
setInterval(myFunction, 1000);

function myFunction() {
  let d = new Date();
  document.getElementById("demo").innerHTML=
  d.getHours() + ":" +
  d.getMinutes() + ":" +
  d.getSeconds();
}
</script>

</body>
</html>

在上面的示例中, myFunction 用作回调。

myFunction 作为参数传递给 setInterval() 。

1000 是间隔之间的毫秒数,因此将每秒调用一次 myFunction() 。

回调选择

通过异步编程,JavaScript 程序可以启动长时间运行的任务,并继续并行运行其他任务。

但是,异步程序很难编写和调试。

因此,大多数现代异步 JavaScript 方法不使用回调。相反,在 JavaScript 中,异步编程是使用 Promises 来解决的。

参考链接: JavaScript Asynchronous

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值