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/