PubSub.js多个订阅,或处理等待多个回调的不同方式

时间:2013-03-30 15:48:52

标签: javascript

我正在试图找出处理这种情况的最佳方法。基本上我希望流程像这样工作:

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']);
}

1 个答案:

答案 0 :(得分:0)

使用promise似乎更适合这个问题而不是pub / sub,这是我最终使用的实现:

https://github.com/hemanshubhojak/PromiseJS