【发布时间】:2012-08-29 18:28:17
【问题描述】:
在我的代码中,我有一个函数调用数组。我遍历这些调用并使用 .apply() 来调用它们。问题是,如果新函数的调用需要任何时间,循环将 .apply() 并在前一个函数完成之前调用下一个函数。 >.
function someFunc(element, calls){
if(calls.length){
fn = calls[0];
calls.shift();
fn.apply(element, args);
someFunc(element, calls);
}
}
因此,如果在 apply 函数上有回调,那么这可以按我的意愿工作。即
function someFunc(element, calls){
if(calls.length){
fn = calls[0];
calls.shift();
fn.apply(element, args, function(){
someFunc(element, calls);
});
}
}
我还有一个关于在回调函数中调用 someFunc 的问题。我的calls 数组中的函数会影响我的element 变量。所以我想确保在它被改变之后,它会在回调中传递给 someFunc,这样下一个函数也可以操作它。有时我只是对this 上下文感到困惑。 :)
如果有帮助,我正在使用 jQuery。我知道如何向 jQuery 方法添加回调,但在处理本机 JavaScript 代码时我不知道如何做到这一点。 如何向 .apply() 方法添加回调?
【问题讨论】:
-
除非您知道所有函数都遵循的参数模式,否则无法做您想做的事情。
-
@Pointy - 如果我将所有参数都放在一个数组中,又名
args,为什么还需要一个参数模式? -
问题是没有办法判断一个函数是否是异步的并且设计为接受一个回调函数参数(或两个这样的参数,或更多)。您不能让系统“等待”一个函数及其异步后续完成。因此,如果您知道所有函数(例如)都将回调作为最后一个参数,那么您可以解决一些问题。
-
@Pointy 如果被调用函数遵循通用接口(例如 Promise),那么您可以让系统“等待”异步调用完成。
-
element会发生什么样的事情?只是更改它的属性,或者用一个全新的对象替换它?
标签: javascript jquery callback