检查由 javascript 中不相关事件触发的函数中的函数是否完成
Check if function is complete in function that is triggered by unrelated event in javascript
我有一个名为call facebook的函数。
call_facebook(284328420994");
call_facebook(197214710347172);
它运行几次 它向Facebook发出ajax请求,通常需要几秒钟才能完成。
我还有一个功能,当我点击谷歌地图上的标记时,它会修改 html:
google.maps.event.addListener(loc, 'click', function () {
var template = $('#trips').html();
var content = locationIndex[loc.title];
var html = Mustache.to_html(template, content );
});
如果单击其中一个标记,则完成call_facebook事件。我想重新运行单击标记时触发的函数。最好的方法是什么?
你可以有一个回调,你的call_facebook
函数从 ajax 成功回调中检查该回调。如果上面没有列出回调,则不执行任何操作;如果有,请运行它。将其与一个标志相结合,告诉您是否有未完成的call_facebook
调用,您可以从click
处理程序中检查。像这样:
var done_callbacks = [];
var activecalls = 0;
function call_facebook(id) {
// Set active flag
++activecalls;
// Start ajax
start_ajax_call(/* ... */, function() {
var f;
// This is the "success" callback
// Decrement active flag
--activecalls;
if (activecalls === 0) {
// None others are active, process callbacks
while (done_callbacks.length !== 0) {
f = done_callbacks.shift();
f();
}
}
});
}
然后
google.maps.event.addListener(loc, 'click', function () {
if (activecalls === 0) {
doUpdate();
}
else {
done_callbacks.push(doUpdate);
}
function doUpdate() {
var template = $('#trips').html();
var content = locationIndex[loc.title];
var html = Mustache.to_html(template, content );
}
});
您可以对上述内容进行各种改进。例如,如果你只需要将与同一loc
相关的两个东西挂接在一起,你可以使用回调映射而不是数组,并且只触发相关的回调。您可以将click
处理程序中的逻辑与call_facebook
(用于维护)等隔离到另一个函数中。您可能会捕获f();
调用周围的错误。但这是基本思想。
请注意,上面没有竞争条件,即使它可以看到好像有竞争条件。事件是异步的,可以随时排队,包括 JavaScript 代码运行时;但是它们的处理程序永远不会同时运行,因为除非您使用 Web Workers(我们上面没有),否则浏览器上的 JavaScript 是单线程的。因此,我们不会(例如)在click
处理程序中检查activecalls === 0
,然后在执行click
处理程序中的下一条语句之前对其进行更改。
相关文章:
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 如何检查函数是否将运行或可用
- JavaScript尾部调用中的函数是否经过优化
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 是否可以测试javascript函数是否是构造函数
- JavaScript-确定数学函数是否为无穷大
- jQuery-有没有一种方法可以测试函数是否异步
- 作用域问题-此函数是否形成闭包-JavaScript
- 如何检查该函数是否从外部js文件调用
- 什么更快?运行空函数或检查函数是否未定义
- 箭头函数是否像命名函数一样进行了优化
- JavaScript setInterval函数:是否存在错误
- 如何判断被调用的函数是否源自javascript中的点击事件
- jquery remove函数是否也删除了敲除绑定
- 如何使用jsoup检测内联js函数?我基本上想检查内联函数是否存在
- 当执行进入页面时,JavaScript history.back()函数是否生成HttpRequest
- 在动态更改数据之后(在ajax调用之后)检查函数是否存在
- 检查函数是否属于javascript中的function类型
- 从对象中调用的函数是否可以访问该对象的作用域