javascript - 检测不提供回调的异步函数的执行结束

标签 javascript google-maps-api-3

通常是一个异步函数,比方说async(arg, cb),在末尾提供一个回调函数占位符(cb),这样您就可以运行自己的代码异步例程结束。如果异步函数没有回调参数怎么办?很明显 cb 缺少:

async(args);
myFunction();

myFunction() 将首先运行。如何让 myFunction() 仅在 async 结束后运行?我尝试编写自己的回调包装器但没有成功;他们只是重定向函数调用。

编辑 我对上述问题的答案很感兴趣,但我将举例说明我是如何遇到这种情况的。

我的示例是在 Google map 路线服务中。异步函数是一个名为 directionsDisplay.setDirections(result); 的绘图例程,我想在绘图完成后重新居中并放大。我将一个 3 秒的 setTimeout 放在一起,以便我想要的发生,但这是一个笨拙的解决方案。改变 Google Maps API 似乎是不可能的。还有什么比这更好的?

路线服务在这里。

http://jsfiddle.net/ryxtj/1/

只需在任一下拉列表中选择一个城市即可。 3 秒后 map 应该移动。

最佳答案

通过简单的 Google 搜索,我找到了这篇相关帖子:Google Maps V3 setDirections() callback

其中显示了在方向改变时添加事件监听器。

Javascript 是单线程的,没有信号量或互斥量等同步功能。因此,无法让您的代码“等待”直到异步函数完成或将异步函数转换为同步函数。

解决这个问题的唯一方法是使用事件处理程序和/或回调函数。任何自尊的 API 提供者都不会为您提供一个异步函数的 API,而您却无法知道它何时完成。如果他们这样做,那将是一个非常糟糕的 API,您必须进入该 API 的源代码实现,找到处理事件完成的位置并安装回调(通过修改原始源代码)。除非他们已经在设计中提供完成事件或完成回调,否则您无法从代码“外部”执行任何其他操作。

关于javascript - 检测不提供回调的异步函数的执行结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271039/

相关文章:

javascript - 在不指定纬度和经度的情况下将谷歌地图置于地点 ID 的中心?

Javascript 迭代器不起作用,但硬编码数字可以

javascript - 如何检查数组对象在 for 循环中是否完成

javascript - 使用 AngularJS 中的 promise 管理来自 Controller 的服务回调?

javascript - 如何通过Angular方法返回数据库结果

JavaScript MVC 框架

javascript - 用js减去div宽度的一半

javascript - Google map API V3 响应语言的城市名称错误

javascript - 当类添加调用我的函数或事件时

javascript - Google map API 不显示计算路线上的线路