【发布时间】:2015-01-26 12:26:06
【问题描述】:
我的代码中存在异步函数的复杂问题。 我有一个对象,我必须对其应用不同的功能(动画、内容分析等)。
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。
【问题讨论】:
-
(1) 哪些函数是异步的? (2) 你真的是指
arguments(在三个地方)还是那个伪代码? -
不,这不是伪代码。 data 是一个 Object 和 func、func_at 和 func_after - 一些作为参数传递的随机函数。 “func”和“func_at”同时启动,“func_after”应该在所有其他都完成后启动。
-
所以“func”和“func_at”是异步的——它们返回promise?
标签: javascript jquery asynchronous recursion jquery-deferred