我在这里真的很努力来掌握编写异步 JavaScript。你能否提供一个简单的 JavaScript 函数的例子,它是用纯 JavaScript 异步编写的(而不是使用 Node.js 或 JQuery)
什么是异步 javascript 函数的简单示例?
IT技术
javascript
asynchronous
2021-03-18 08:17:12
3个回答
JavaScript 本身是同步的和单线程的。您不能编写异步函数;纯 JS 没有计时 API。并行线程不会有副作用。
你可以做的是使用你的环境(Node.js的,的Webbrowser),允许您安排异步任务提供了一些API -使用超时,AJAX功能,FileAPI, requestAnimationFrame
,nextTick
,WebWorkers,DOM事件,等等。
使用示例setTimeout
(由HTML Timing API 提供):
window.setTimeout(function() {
console.log("World");
}, 1000);
console.log("Hello");
更新:由于 ES6 有Promise作为内置于纯 JavaScript 中的异步原语,所以你可以这样做
Promise.resolve("World").then(console.log); // then callbacks are always asynchronous
console.log("Hello");
但是,就其本身而言,当您无法等待(例如超时)时,它们并没有真正的帮助。而且它们也不会改变线程模型的任何内容,所有执行都是从运行到完成的,中途没有任何事件干扰。
这是异步的:
setTimeout(function(){
console.log('1');
}, 2000);
console.log('2');
2 会在 1 之前写入控制台。因为 setTimeout 是异步的。
这是一个非常简单的例子:
for (var i = 0; i < 10; i++) {
window.setTimeout(function() {
console.log(i);
}, 2000);
}
您可能希望这些console.log()
调用向您展示0, 1, 2
等等,如以下代码段所示:
for (var i = 0; i < 10; i++) {
console.log(i);
}
但实际上只会10
打印 s!函数传入setTimeout
函数的原因(作为它的“回调”参数)将在 for
循环完成后被调用- 即在i
value 设置为 10 之后。
但是你应该明白一件事:浏览器中的所有 JavaScript 都在单个线程上执行;异步事件(例如鼠标单击和计时器)仅在执行队列中有空缺时才运行。这是John Resig 撰写的关于此主题的精彩文章。
其它你可能感兴趣的问题