[英]Get variable out of anonymous javascript function
我正在使用匿名函数对使用Restler的get
函数返回的html执行一些工作:
var some_function() {
var outer_var;
rest.get(url).on('complete', function(result, response) {
if (result instanceof Error) {
sys.puts('Error: ' + result.message);
} else {
var inner_var;
// do stuff on **result** to build **inner_var**
outer_var = inner_var;
}
});
return outer_var;
}
如何将inner_var
的值获取到some_function
范围并将其返回? 我在这里写的东西行不通。
get调用是异步的,需要一些时间,稍后再调用您的回调。 但是,在调用get之后,脚本将继续执行并转到下一条指令。 所以这是发生了什么:
您不能让some_function返回异步值,因此您将不得不使用回调,并在处理完数据后让代码对其进行调用。
var some_function(callback) {
rest.get(url).on('complete', function(result, response) {
if (result instanceof Error) {
sys.puts('Error: ' + result.message);
} else {
var inner_var;
// do stuff on **result** to build **inner_var**
callback(inner_var);
}
});
}
像节点的大多数模块一样,Restler还是基于事件的具有异步调用的库。 因此,此时您确实return outer_var;
complete
回调不一定被调用(对于某些库,如果结果被缓存,则可能是这样,但是您应该始终期望将其称为异步)。
如果添加一些日志记录,则可以看到此行为:
var some_function() {
var outer_var;
console.log("before registration of callback"); //<----------
rest.get(url).on('complete', function(result, response) {
console.log("callback is called"); //<----------
if (result instanceof Error) {
sys.puts('Error: ' + result.message);
} else {
var inner_var;
// do stuff on **result** to build **inner_var**
outer_var = inner_var;
}
});
console.log("after registration of callback"); //<----------
return outer_var;
}
因此,如果您想使用此值做某事,则需要从完整的回调函数中调用应该使用该值做某事的函数。
var outer_var;
从您的功能some_function
; var outer_var;
上层然后你的功能 完成步骤1之后,应该就可以工作了,而实际上并不需要步骤2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.