Javascript中的递归异步回调
Recursive Asynchronous Callbacks in Javascript
关于这个问题,我试图添加一个回调来获取数据。所以我试着这样做:
var subgroupIds = [];
var that = this;
this.getSubGroups = function (groupId,callback) {
var anotherObject = this;
this.getGroups("groupId="+groupId, function(groups) {
if ($.isEmptyObject(groups)) {
return;
} else {
$.each(groups, function(index,group) {
subgroupIds.push(group.id);
that.getSubGroups(group.id);
});
anotherObject.callback(group.id);
}
});
}
我认为在上一个问题之后我对关闭有了更好的理解,但我想我没有…我得到以下错误:
Uncaught TypeError: Object [object Window] has no method 'callback'
我在这里做错了什么?
编辑
getGroups的内容:
this.getGroups = function(filter,callback,error_callback) {
this.getJSON('/'+apiVersion+'/groups/',function(data){
// run through the filter engine
output = runFilter(data, filter);
callback(output);
},error_callback);
}
不需要是anotherObject.callback(group.id);
,你需要的是callback(group.id);
看起来你把this
和arguments
对象混淆了。
arguments
保存传递给函数的所有参数:
var aFunction = function () {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
};
aFunction(1, 2, 3, 4); // 1, 2, 3, 4
而this
基本上指的是函数的"所有者"(粗略地说,就是在点之前发生的任何事情):
var aFunction = function () {
console.log(this);
};
var object1 = { f: aFunction, name: "object1" };
var object2 = { f: aFunction, name: "object2" };
object1.f(); // Object { name="object1", f=function()}
object2.f(); // Object { name="object2", f=function()}
aFunction(); // Window
回调是一个参数,它不绑定到上下文。
我认为你想用anotherObject
作为this
的值来调用回调,对吗?
你可以这样做:
$.proxy(callback, anotherObject)(group.id);
或者如果你只想执行回调,并且你想使用闭包,你需要添加:
this.callback = callback; //before
var anotherObject = this;
相关文章:
- Meteor:异步回调问题
- JavaScript中的异步回调
- 如何将此异步回调转换为生成器
- 在Nodejs中堆叠异步回调事件的最佳方式
- 从异步回调中获取值
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 将数据注入异步回调(使用 node.js)
- 由于异步回调,变量被覆盖
- 管理Meteor中的异步回调
- 如何等到异步回调完成后才能使用检索到的数据
- Node.JS函数返回异步回调函数的值
- 将Node REPL调整为不阻塞异步回调的提示
- 如何正确地将异步回调与react中的表单操作连接起来
- 返回异步回调作为最佳实践
- 使用其他模块中的函数,避免异步回调地狱
- Node.js:异步回调混淆
- JavaScript中的调试技术.异步回调
- Javascript OOP-在异步回调中丢失了这一点
- 在 JavaScript 中的异步回调函数中访问“this”
- 异步回调后返回