3
由於此應用程序的複雜性,我需要包裝Facebook API調用,就像這樣。從匿名函數範圍提取數據
//In main file, read is always undefined
var read = fb_connect.readStream();
// In fb_wrapper.js
function readStream() {
var stream;
FB.api('/me/feed', {limit:10000}, function (response) {
stream = response.data;
});
return stream;
}
我知道,由於呼叫的異步性質,readStream()
功能的其餘部分將返回stream
(沒有值)。我很難找到一種將數據從回調函數範圍中取出並返回到更高範圍的方法。 FB API調用返回正常(我調試了它一百次),但獲取響應數據一直是迄今爲止的戰鬥。
如果有人有任何建議,將不勝感激。我搜索了一下Facebook的jQuery插件(可能是預製的包裝),但運氣不錯。
感謝您的答覆。真的,我正在尋找這些API調用的包裝,所以我可以有更多的面向對象的應用程序。建模如下:'app.FBAPICall()',然後能夠從這個調用中返回值。但是,我發現異步處理程序由JS線程中的最頂層對象調用,而不是由我的應用程序對象調用。 – Mark 2011-03-13 17:45:08
你說得對。異步調用需要「繼續」編碼風格,與正常的過程風格完全不同。在「繼續」的風格中,你從內到外編碼。將異步JavaScript調用轉換爲同步調用並不總是很容易(或可能),因爲JavaScript是單線程的 - 正如您所提到的那樣,回調由JS線程調用,您不應該阻止。 – 2011-03-14 03:32:08