我的代码中存在异常函数的复杂问题。 我有一个对象,我必须应用不同的功能(动画,内容分析等)。
this.buildChain = function (data, func, func_at, func_after) {
//first I launch some function
func.apply(animData, arguments);
//then I filter an array of objects
data.filter(function(e){
if(e.trigger == 'at' && e.link == animData.id) return true;
}).forEach(function(e){
//And apply the function to all objects that've been filtered
//These functions apply at the same time as the first, "func"
func_at.apply(e, arguments);
});
//When my "func" and all "func_at" operations are resolved, I have
//to filter my array again and execute "func_after" function
data.filter(function(e){
if(e.trigger == 'auto' && e.link == animData.id) return true;
}).forEach(function(e){
func_after.apply(e, arguments);
});
};
事实是,我必须将此buildChain
函数应用于递归函数:
function playChain(animData){
function func() {
//some action
}
function func_at () {
playChain(this);
}
function func_after () {
playChain(this);
}
s.buildChain(data, animData, func, func_at, func_after);
}
我知道,它可以通过jQuery.Deffered()
对象以某种方式解决,但是当涉及到递归循环时我会陷入困境。因为实际链可以从一个对象开始,然后会有func_at
,然后一个func_after
,然后再来一个func_at
。
答案 0 :(得分:0)
我已将返回已解决的$.Deferred()
对象添加到我的函数中。
function playChain(animData){
function func() {
//some action
return new $.Deferred().resolve();
}
function func_at () {
playChain(this);
}
function func_after () {
playChain(this);
}
s.buildChain(data, animData, func, func_at, func_after);
}
然后我更正了buildChain函数。
this.buildChain = function (data, animData, func, func_at, func_after) {
function act1 () {
var d = func.apply(animData, arguments);
data.filter(function(e){
if(e.trigger == 'at' && e.link == animData.id) return true;
}).forEach(function(e){
func_at.apply(e, arguments);
});
return d;
}
function act2() {
data.filter(function(e){
if(e.trigger == 'auto' && e.link == animData.id) return true;
}).forEach(function(e){
func_after.apply(e, arguments);
});
}
act1().done(act2);
};