JavaScript同步多个函数调用
JavaScript synchronise multiple function calls
我有一个文档,它有两个javascript
函数A();
和B();
。这些函数的调用顺序不特定,我想在最后一次调用时做点什么。
我可以通过使用局部变量来完成任务,但在这样做之前,我想确认是否有更优雅/更稳健的方法来实现这一点——我可能有两个以上这样的函数,这使得局部vars解决方案变得一团糟。
更新1-更多详细信息
我在一个页面上有几个SilverLight插件,每个插件都有
<param name="onLoad" value="pluginLoaded" />
我只能说"pluginLoaded"没有参数什么都没有。
插件以绝对随机的顺序加载,完成后我想调用另一个函数。
我们通过重新定义函数来实现这一点:
您现在拥有:
function A() { /* do something */ }
function B() { /* do something */ }
function FinalCurtain() { /* do something after A and B have been called*/ }
就这么做吧编辑:在要求"我希望doA和doB每个只调用一次"之后
function DoA() { /* do something */ }
function DoB() { /* do something */ }
function DoFinalCurtain() { /* do something after A and B have been called*/ }
function A() {
DoA();
B=function() {DoB(); FinalCurtain();}
A=function() {}
}
function B() {
DoB();
A=function() {DoA(); FinalCurtain();}
B=function() {}
}
function FinalCurtain() {
DoFinalCurtain();
//Remove next 2 lines if you do NOT want to start the process over once DoFinalCurtain() has beenm called.
A=function() {DoA();}
B=function() {DoB();}
}
将HTML更改为以下内容:
<param name="onLoad" value="My_firstPluginLoaded" />
...
<param name="onLoad" value="My_secondPluginLoaded" />
...
<param name="onLoad" value="My_thirdPluginLoaded" />
然后在你的页面上有这样的代码:
var loadedPlugingCount = 0;
var totalPlugins = 3;
function My_firstPluginLoaded() {
loadedPlugingCount++;
firstPluginLoaded();
}
function My_secondPluginLoaded() {
loadedPlugingCount++;
secondPluginLoaded();
}
function My_thirdPluginLoaded() {
loadedPlugingCount++;
thirdPluginLoaded();
}
function CheckAllCompleted() {
if (loadedPlugingCount === totalPlugins) {
alert("All done!");
return true;
}
window.setTimeout(CheckAllCompleted, 10);
return false;
}
CheckAllCompleted();
想法很简单:有自己的函数,在调用真正的回调之前增加全局计数器,然后检查计数器,直到达到所需的计数。
我有一个想法,但我不确定它是否足够优雅。
您需要一个全局变量:
functionsCalled = {};
A
和B
都需要用recordCall(arguments.callee)
调用的一个函数
function recordCall(fn){
functionsCalled[fn] = 1;
}
最后是一个函数,它接受一个函数数组,检查每个函数是否被调用,如果被调用,则调用某个函数。你可以称之为haveBeenCalled([A, B], function { ... });
function haveBeenCalled(fns, fn) {
for(var i = 0; i < fns.length; i++) {
if(fns[i] !== 1) return;
}
return fn();
}
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 异步函数调用是否可以在两个同步语句之间完成
- 对async函数进行同步调用
- 如何确保包含多个$.ajax调用的函数完全同步运行,并允许在执行时重新绘制浏览器
- 同步函数调用涉及post-json调用,其中一个函数应该在另一个函数成功后成功
- 使用Jquery$When进行异步和同步函数调用
- 如何在nodejs中同步函数调用
- 函数内的两个回调函数未同步调用
- JavaScript同步多个函数调用
- ASP.NET->对javascript函数的同步调用
- 如何包装函数调用,有时做异步调用,使其行为同步
- 从外部JS文件调用同步函数
- 有没有办法在node.js中强制同步函数调用?
- JavaScript(香草,没有jQuery) -函数与*同步* AJAX (XMLHttpRequest)调用的行为与
- 无法在javascript中调用同步函数