为什么Alert会暂停?

时间:2014-10-20 21:03:17

标签: javascript

首先,如果以前回答过这个问题,请道歉。

我在JS中编写代码来读取Excel文件,获取列中第一个单元格的值,搜索它(它是一个ISBN代码,我在搜索使用Google Books API)并获取通过搜索提供的其他相关信息(如标题,副标题和作者),然后继续下一行并重复此过程。

我的问题是将新数据写回Excel文件中。代码将所有信息写入文件中最后使用的行。在使用window.alert标记代码时,我注意到当警报处于for循环中时,在搜索启动之前,新数据插入正常,但是如果我尝试使用暂停(如计时器功能)它或消耗时间的一个循环)它根本没有帮助。

我想知道的是为什么这种行为可能会发生,如果可能的话,当然可能解决我的问题,因为必须使用警报作为暂停并不是最有趣的解决方案。< / p>

提前致谢

2 个答案:

答案 0 :(得分:1)

警报将始终停止所有代码的执行,除了网络工作者。因此,如果需要继续执行,请使用Web worker。请查看this以供参考(部分内容涵盖此主题)

答案 1 :(得分:0)

当浏览器显示本机模态交互小部件(例如警报)时,它会转换为等待响应的状态。在此状态下,允许重绘页面并处理某些低级事件。以下是alert()confirm()使用的Mozilla Firefox代码:

http://mxr.mozilla.org/mozilla-central/source/toolkit/components/prompts/src/nsPrompter.js#434

openRemotePrompt功能在用户点击&#34; OK&#34;之前不会返回。在警报上。但是,当警报打开时,浏览器的行为会有所不同。循环重复调用thread.processNextEvent来执行某些类型的工作,直到对话框关闭。 (它没有运行应用程序的JavaScript代码,因为它意味着是单线程的。)

当您使用纯JavaScript忙等待时,例如,通过循环直到某个挂起时间,浏览器不会采取这些措施来保持移动。最值得注意的是,当JavaScript代码循环时,UI不会重绘。