我一直在試着理解Javascript關閉,並認爲我正在進行一些操作。我已經成功地在我的內部函數中返回一個迭代整數(由for循環生成)。當函數需要回調值時,Javascript會關閉
但是,這個有問題的函數也需要函數本身生成的參數。原諒我的術語 - 但它可能是一個callaback參數(基本上,參數的值是基於我發出的函數返回的)。
下面有我的問題的更多的解釋,但首先,這裏是有問題的代碼(與關閉工作 - [值]是我的每次迭代變化的值):
FB.api('/me/tagged?limit=100', function(response) {
for (var i=0; i<response.data.length; i++){
var taggedId = response.data[i].id;
var fromId = response.data[i].from.id;
var fromName = response.data[i].from.name;
var taggedQuery = new Parse.Query('tagged');
taggedQuery.equalTo('taggedId',taggedId);
taggedQuery.first({ //.first returns the first match (.find returns all)
success: (function(value) {
return function() {
console.log(response.data[value]);
}
})(i),
error: function(taggedRecError){
console.log('error: '+taggedRecError.message);
}
});
} //for
});
所以基本上,在上面,我查詢Facebook來獲取用戶的標記帖子。我使用for循環遍歷每個結果。
然後我使用Parse.js來查詢是否有爲此標記對象保存的記錄。
我希望我的代碼能夠識別我是否(有保存的對象)。在解析我通常會做到這一點使用類似以下內容:
taggedQuery.first({ //.first returns the first match (.find returns all)
success: function(value) {
if(value){
//do nothing
}
else {
//do something - e.g. save to Parse data store
}
}
});
所以,你可以看到,我才能決定下一步做什麼使用返回paramater(價值)的存在。
但是,在第一個代碼塊中,您可以看到爲了使閉包工作,我必須將參數('(i)')直接傳遞到成功函數中,以便獲得適當的i值用於該功能。然而,這然後扭曲我們從Parse得到的結果 - 即返回的對象來自我傳遞參數 - 不是從分析返回基於我的數據存儲的一個
我似乎在捕獲22:通過參數手動獲取成功的關閉(但是然後從Parse調用中丟失返回的參數),或者傳入無參數以確保Parse基於我的數據存儲返回正確的響應(但是在所述函數中具有錯誤的i值:即 - 沒有關閉)。
我希望這很清楚。如果沒有,請讓我知道。任何幫助讚賞。
你可以同時使用。另見http://stackoverflow.com/q/750486/1048572 – Bergi 2012-07-23 18:53:36