在我的代码中,我需要调用一个对象方法,从其回调中检索数据,并将其传递给另一个方法或函数。
someObject.getSomeData({option1:'value1', option2:'value2'},
function(data) {
doAwesomeStuff(data);
}
);
但是,回调不识别其范围之外的任何函数/对象/变量。
我现在尝试做的是将所有内容包装在一个函数周围。
var myData = '';
(function(myData) {
someObject.getSomeData({option1:'value1', option2:'value2'},
function(data) {
myData = data;
}
);
});
doAwesomeStuff(myData);
然而,这也不起作用。
有人知道如何正确地完成这项工作吗?
答案 0 :(得分:3)
你还没有真正给我们足够的信息,但是这句话:
但是,回调不识别其范围之外的任何函数/对象/变量。
...不正确。函数可以访问定义范围内的所有内容,例如:
var a = 10;
function foo(b) {
bar(5);
function bar(c) {
alert(a + b + c);
}
}
foo(12); // alerts "27"
请注意bar
不仅可以访问c
,还可以访问b
(来自foo
)和a
(来自最外层)范围显示)。
因此,在您的示例中,您传入的匿名函数作为回调可以访问其定义范围内的所有内容;在其他地方定义的doAwesomeStuff
可能会访问不同的信息,因此您必须让回调传递它所需的任何数据。
所以我猜你的代码看起来像这样:
function doAwesomeStuff(data) {
// ...
}
function doSomethingNifty() {
var a = 10,
b = 20;
someObject.getSomeData({option1:'value1', option2:'value2'},
function(data) {
doAwesomeStuff(data);
}
);
}
...并且您希望doAwesomeStuff
能够通过a
的来电访问b
和doSomethingNifty
。如果是这样,你唯一的选择是将它们作为参数传递给它(可能是最好的),或者将它们导出到doSomethingNifty
和doAwesomeStuff
共享的某些范围的变量(可能不太理想,太像globals)。 / p>
答案 1 :(得分:1)
答案 2 :(得分:1)
你的第一种方法:
someObject.getSomeData({option1:'value1', option2:'value2'},
function(data) {
doAwesomeStuff(data);
}
);
看起来很好。请提供更多有关不起作用的详细信息。
一个问题可能是getSomeData()
实际上没有调用回调函数。
doAwesomeStuff()
可以修改接收数据中的许多不同变量。 doAwesomeStuff()
可以访问的变量是可以在其中创建的变量(在范围中)。