为什么Alert起暂停作用

Why is Alert working as a pause?

本文关键字:作用 暂停 Alert 为什么      更新时间:2023-09-26

首先,如果之前有人回答过这个问题,我深表歉意。

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

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

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

提前感谢

警报将始终停止所有代码的执行,除了web工作者。因此,如果您需要继续执行,请使用web工作程序。看看这个以供参考(注释部分部分部分涵盖了这个主题)

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

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

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

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