javascript - 进行同步 JavaScript 调用的技巧

标签 javascript asynchronous websocket npapi indexeddb

JavaScript 在大多数现代 API 中使用异步调用来处理磁盘 IO 和网络等“慢”事物。我意识到这样做的目的是什么,但是在某些情况下确实需要进行同步调用。

例如,我有一段无法重写的 JavaScript 代码。代码中存在对某个方法的同步调用。为了在开发人员环境中进行一些调试,我想拦截此调用,将信息发送到服务器并等待服务器响应。该拦截器在生产环境中不起作用。 AFAIK,有一种方法可以使用 NPAPI 来做到这一点,但现在它已被正式弃用。而且Google Chrome和Mozilla Firefox都只提供异步套接字API,所以我没有机会执行这样的拦截。另一种方法是发送同步 XMLHttpRequest,但速度相当慢,需要 HTTP 连接和 HTTP 负载,所以我更喜欢 WebSocket。

我还有另一个极端情况,我必须调用 IndexedDB,但这很难解释。不幸的是 IndexedDB 同步 API 没有在任何地方实现。

还有其他同步调用异步方法的技巧吗?我愿意接受特定于浏览器的黑客攻击、浏览器附加组件、插件等等。或者可能有人知道如何要求所有开发 Web 标准的委员会(以及浏览器开发人员)至少包含同步 API 的 WebWorker 版本?

我知道,关于同步调用异步方法的问题被问过很多次,常见的答案是“这是一个坏主意”。我意识到通常这是一个坏主意,但在某些情况下我们确实需要同步调用的自由。

最佳答案

我不知道有什么办法。我通常将异步代码描述为病毒式的:它会以更多的异步性迅速感染周围的代码。我不知道有什么办法可以打破这一点,而且在我看来似乎不太可能有办法。显然,有一些技术可以使异步代码看起来更加同步,从 Promises 开始,然后继续到宏等。但最终,运行时仍然是异步的。

也许比我聪明的人可以提供有趣的建议。我也很想听听,尽管我目前没有任何个人需求。

关于javascript - 进行同步 JavaScript 调用的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834404/

相关文章:

javascript - 为什么我的元素在页面加载和 javascript 执行时四处移动?

javascript - 让ExternalInterface与所有浏览器一起工作的优雅方式

javascript - 等待所有文件更新,然后下载它们

c# - .NET Remoting - 服务器如何更新客户端?

javascript - 如何避免同步 XMLHttpRequest

php - 将配置数据发送到 websocket

javascript - 如何在 slickgrid 中显示行号列?

VB.Net 正确关闭在后台工作程序上运行的异步套接字服务器

PHP 从原始 tcp 套接字读取数据并使用 2 React Connector 通过 WebSocket 客户端发送它们

macos - 断开浏览器选项卡(测试用户连接中断时会发生什么)