我有这个回调'机器': 它被设计为对象文字。
APC.UTIL.Callback = {
nn: 0,
step: 0,
Myargs: null,
that: null,
internal: function () {
var the_f = that.Myargs[that.step];
if (that.step < that.nn) the_f(that.internal);
else {
the_f();
that.Myargs = null;
}
that.step++;
},
loop: function () {
this.Myargs = arguments;
this.nn = this.Myargs.length - 1, this.step = 0;
that = this;
this.internal();
},
}
我这样使用它:
var F1 = function (loop_back) { ... bla bla ; loop_back(); }
var F2 = function (loop_back) { ... bla bla ; loop_back(); }
var F3 = function (loop_back) { ... bla bla ; loop_back(); }
var F4 = function (loop_back) { ... bla bla ; loop_back(); }
// -------------------------------------------------------
APC.UTIL.Callback.loop(F1,F2,F3,F4);
回调称自己为第一,内部。然后F1接收函数以便以后再使用它并再次调用'internal',F2等.... (F1 F2 F3存储在Myargs数组中。)
已知问题......缺少那个或那个(范围)。 在第二次调用'that'再次变为null值....
我想为所调用的函数提供一个干净的解决方案。 我不想在这些中编写更多代码。 var F1 = function(loop_back){... bla bla; loop_back(); } 如您所见,我只将loop_back参数作为参数编写,我用它来进行回调。
我认为我的案例是特别的,与范围和范围相关的问题有所不同。 object literal。
任何帮助将不胜感激。
答案 0 :(得分:0)
您将步进放在错误的位置,如果您在环回电话后调用,则永远不会到达。
var example = {
nn: 0,
step: 0,
Myargs: null,
that: null,
internal: function () {
var the_f = that.Myargs[that.step];
if (that.step < that.nn) {
that.step++;
the_f(that.internal);
} else {
// ...this method expects a function as a parameter.
the_f(function(){});
that.Myargs = null;
}
// will never be reached
// that.step++;
},
loop: function () {
this.Myargs = arguments;
this.nn = this.Myargs.length - 1, this.step = 0;
that = this;
this.internal();
},
}
var F1 = function (loop_back) { console.log("F1"); loop_back(); }
var F2 = function (loop_back) { console.log("F2"); loop_back(); }
var F3 = function (loop_back) { console.log("F3"); loop_back(); }
var F4 = function (loop_back) { console.log("F4"); loop_back(); }
example.loop(F1, F2, F3, F4);