[英]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.