我需要一些帮助才能理解如何解决这个问题。
我需要编写一个对象的代码,它允许我们注册几个不同的函数来执行单个公共回调函数。
该对象的目的是执行所有已注册的函数,然后,一旦完成所有这些函数,它应该执行定义的回调函数。
比方说 如果我调用MyFuncs.start(),MyFuncs对象将开始异步执行所有已注册的函数。一旦最后一个返回,它将最终执行回调函数。
有人可以在线指导一些资源或帮助我知道如何解决这个问题。
我已经编写了一个代码来实现这一点,但我不知道为什么它没有给我想要的结果。 有人可以帮助我,请告诉我这是否是正确的做法。
我的代码是
var MyNewClass=(function()
{
return function()
{
this.registeredFunctions=2;
this.count=0;
this.function1=function()
{
$.ajax(
{
url: '/echo/html/',
success: function(data)
{
alert('request complete');
this.markDone();
}
})
};
this.function2=function()
{
$.ajax(
{
url: '/echo/html/',
success: function(data)
{
alert('request complete');
this.markDone();
}
})
};
this.register=function(newFunction)
{
this['function'+(++registeredFunctions)]=newFunction;
};
this.start=function()
{
this.function1();
this.function2();
};
this.callback=function()
{
alert("I am callback");
};
this.markDone=function()
{
this.count++;
if(this.count==this.registeredFunctions)
{
alert("all function executed,calling callback now");
callback();
}
};
};
})();
$(document).ready(function()
{
$('.start').click(function(){
var o=new MyNewClass();
o.start();
});
});
注意:我不能使用$ .when的jQuery,因为在这里用户可以发送任何函数进行注册,并且定义的函数不一定会返回给我一个延迟对象。
这就是我不能在这里使用$。的原因。
好吧,我已经找到了解决方案,我在这里发布,以便对其他人有所帮助。
解决方案如下:
答案 0 :(得分:0)
这是我的js文件,其中定义了我的类和所有函数
var MyNewClass=(function()
{
return function()
{
this.registeredFunctions=0;
this.count=0;
this.register=function(newFunction)
{
this['function'+(++this.registeredFunctions)]=newFunction;
};
this.start=function()
{
for(var i=1;i<=this.registeredFunctions;i++)
this['function'+i]();
};
this.callback=function()
{
alert("I am callback");
};
this.markDone=function()
{
this.count++;
if(this.count==this.registeredFunctions)
{
alert("all function executed,calling callback now");
this.callback();
}
};
};
})();
用户将注册函数的另一个js文件
$(document).ready(function()
{
$('.start').click(function(){
var o=new MyNewClass();
function a()
{
$.ajax(
{
url: '/echo/html/',
success: function(data)
{
alert('new complete');
o.markDone();
}
})
};
o.register(a);
o.start();
});
});