2013-03-30 67 views
0

我想弄清楚處理這種情況的最佳方法。基本上我想流動以這樣工作:PubSub.js多訂閱,或不同的方式來處理等待多個回調

1)從服務器(異步獲取配置數據)

2.)執行命令doStuff配置數據被接收(異步)

3()之後。 )在doStuff()完成後運行postResults

目前我似乎有使用PubSub.js這個流程工作,但我想弄清楚如何從配置數據(#1)提供結果postResults(#3 )。雖然我似乎有流動與PubSub的工作,我不知道如何訪問從postResults配置(#1)回調數據(#3)

下面是一個代碼摘要:

PubSub.subscribe('config', doStuff()); 
fetchConfigurations(); 

function fetchConfigurations() { 
    var req = new XMLHttpRequest(); 
    var url = CONFIGURATION_SERVER_URL; 
    req.onreadystatechange = function() { 
     if (req.readyState == 4 && req.status == 200) { 
      var configObject = eval('(' + req.responseText + ')'); 
      PubSub.publish('config', configObject); 
     } else { 
      console.log("Requesting config from server: " + url); 
     } 
    } 
    req.open("GET", url, true); 
    req.send(null); 
} 


function doStuff() { 
    PubSub.subscribe('results', postResults); 
    var results = {}; 

     // do some async work... 

    results['test1'] = "some message"; 
     results['test2'] = "another message"; 
     PubSub.publish('doStuff', results); 
} 

function postResults (doStuffId, doStuffData) { 
    var req = new XMLHttpRequest(); 
    var url = TEST_RESULTS_URL; // I want to get this from the configObject is get in fetchConfigurations 
    req.open("POST",url,true); 
    req.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    req.send(doStuffData['test1'] + doStuffData['test2']); 
} 

回答