容易理解“异步事件”的定义?

时间:2010-12-30 00:18:10

标签: javascript events asynchronous terminology definition

我经常遇到这个术语,即使在谷歌搜索之后,仍然无法理解它究竟意味着什么。是否有一些易于理解(理想情况下是示例)定义了某人可以提供的异步事件?

谢谢!

11 个答案:

答案 0 :(得分:423)

非编程示例:

<强>同步 你想要一个比萨饼吃晚餐,你就不会吃冷冻了。所以你必须停止玩WOW,这会扰乱你的公会。你去厨房,做面团,盖上酱汁,加入奶酪,然后扼杀你最喜欢的培根馅料。你花了20分钟的时间在烤箱里再做10分钟的披萨。计时器发出哔哔声,然后拉出热馅饼。您可以坐在电脑前,吃披萨,继续进行突袭。

<强>异步 在玩WOW时你想吃披萨。您在第5台显示器上打开浏览器窗口。你加载比萨网站,并订购你的额外俗气培根披萨与培根油蒜酱。你回到你的突袭中,20分钟后门铃响起。你得到了披萨。你坐在电脑前,吃披萨,继续你的突袭。

那有什么区别?一种方法是浪费20-30分钟的宝贵WOW时间,另一种方式是浪费20美元加上小费。

答案 1 :(得分:19)

您的页面从服务器传送到客户端浏览器,位于Internet的某个位置。浏览器在屏幕上绘制了页面,某人 - 或某些的东西 - 正在查看它。这是一场等待的比赛。眼睛来回移动,在快速跳跃中接受这个或那个细节,不时地向侧面飞去,远离屏幕,以调查环境中的干扰。时钟滴答作响。当用户徘徊不活动时,页面会被轻柔地,被动地发光,手放在鼠标上方松散,脖子向下弯曲,眼睛越来越倾向于邀请您的页面提供的东西。

突然,没有任何警告,光标开始移动,因为鼠标上的手稍微变硬并开始轻推桌子粗糙表面上的小塑料凸起。当鼠标移动时,屏幕上的代理移动模仿,在页面内容中放过有趣的图像和诙谐的评论。最终做出决定,运动暂停,肌肉或两个轻微收缩,鼠标按钮被坚持的手指按下。鼠标中的微动开关触发电子冲击,突然浏览器意识到发生了什么:鼠标点击。

在所有这些中,关于用户在注视页面时所做的一切都发生在浏览器,网页中的任何客户端代码以及服务器上的任何内容完全不可预测的状态。人类行为之间没有可知的“等待时间”。因此,由连接到用户计算机的设备传输的动作在发生时发生而不是根据可预测的时钟 - 也就是说,它们发生异步。 / p>

答案 2 :(得分:18)

想想面试的结束,他们的家伙说:“不要打电话给我们,我们会打电话给你”。这是异步事件的本质。

通常您定义函数并显式调用函数。你的程序有一个结构,它从第1行开始,然后是第2行,除了一些条件代码和迭代,调用函数等,还有一个简单的线性同步结构。

但在某些情况下,您的操作是由程序直接控制之外的事件触发的,来自程序外部的事物,如用户界面事件(用户单击鼠标)或网络事件(有人尝试)连接到您的服务器)。您的代码不会直接生成这些事件。它们是在程序之外生成的,通常由操作系统根据用户界面设备和其他系统的监视生成。这些被称为异步事件。

请记住,“别打电话给我们,我们会打电话给你”

答案 3 :(得分:12)

“在编程中,异步事件是独立于主程序流的事件。异步动作是在非阻塞方案中执行的动作,允许主程序流继续处理。”

  

“使用Ajax,Web应用程序可以   从服务器检索数据   在后台异步   不干扰显示器   和现有页面的行为。“

单击“编辑并保存在SO”时,它将异步发生。

答案 4 :(得分:12)

异步事件是在应用程序主线程外部运行的事件。

理解的最佳方式是与同步运行的事件进行比较。最典型的例子是加载网页。

当您转到此页面时,您单击了一个链接并等待加载该页面,并且在完成加载之前无法与该页面进行交互或使用此页面。相比之下,如果此页面具有与某些用户操作相关联的AJAX事件(即异步JavaScript和XML事件),则此页面将异步加载来自另一个源的一些数据 - 并行(理论上)与正在进行的任何其他操作。 / p>

两个同步事件(A和B)的示例: First A做了一件事。当A完成时B做了一些事情。

两个异步事件(A和B)的示例: A和B都同时做某事,两个事件都没有等待另一个事件。

答案 5 :(得分:7)

以下是javascript中异步操作的示例(您需要打开javascript控制台)

console.log('One!');
setTimeout(function(){console.log('Two!');},0);
//Doesn't wait
console.log('Three!');};

//OUTPUT:
//One!
//Three!
//Two!

console.log('Two!')的调用将在不阻塞其后发生的其余代码的情况下执行。

在实际情况中,将某个人点击网页上的按钮替换为setTimeout。最终会发生对按钮单击的响应,而不会阻止其他代码执行,例如页面呈现。

答案 6 :(得分:5)

简而言之,它意味着在未知的时间之后发生的事情,所以不要指望立即产生结果。

例如,“妈妈,我可以有5美元吗?”

伸出手来赚钱是因为我希望她立即回复给我钱(同步)。

实际上,她会看着我一两分钟,然后决定在她想要的时候做出反应(异步)。

答案 7 :(得分:2)

当两个不同的事件彼此分开发生时,你就无法做到

task1
task2

没有检查task1是否真的完成了。

答案 8 :(得分:1)

异步事件是我们不知道将来何时会发生的事件,例如当某个文件请求服务器时我们不知道它何时会满足我们的请求或我们不知道的UI事件当用户点击某个按钮或其他UI元素时,尽管页面或应用程序正在发生其他任何事情,但它不会阻止任何事情说该页面灰显掉所有UI,直到来自服务器的某个文件未到来或某些事件发生全部事物是独立的,这是异步事件的力量,简单地说是独立事件

答案 9 :(得分:0)

同步VS.异步事件

事件发生时会立即调用某些事件处理程序。这些被称为“同步”事件。一个例子是DocumentNew。一旦用户创建新文档,就会调用它。

但是,事件发生后不久会调用一些事件,通常是在短暂的空闲时间之后。这些被称为“异步”事件。它们是异步的,因为如果在事件发生的确切时间调用用户编写的宏,它将使Source Insight非常稳定。

答案 10 :(得分:0)

如果代码同步(或同步),则表示每段代码按顺序依次运行,下一段代码在前一段完成之前无法运行。大多数代码通常是同步的。

如果代码异步(或异步),则意味着代码可以独立于其他代码运行。如果在一堆同步代码的中间存在异步代码,则在此特定问题的上下文中,异步代码将仅在其事件被触发时运行,而不管您在其中放置同步代码的位置。它是完全独立的,独立于同步代码,并在其事件发生时运行,而不仅仅是在前一段代码完成运行时。这方面的一些示例包括在定时间隔,成功保存文件,发送Web请求后,用户单击按钮时或图像加载后运行的代码。