gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 09:15:29 25 4
gpt4 key购买 nike

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

1.) 从服务器获取配置数据(异步)

2.) 收到配置数据后运行 doStuff()(异步)

3.) doStuff() 完成后运行 postResults

目前,我似乎使用 PubSub.js 运行此流程,但是我试图弄清楚如何将配置数据 (#1) 的结果提供给 postResults (#3)。虽然我似乎可以使用 PubSub 进行流程,但我不确定如何从 postResults (#3) 访问配置 (#1) 回调数据

这里是代码摘要:

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

最佳答案

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

https://github.com/hemanshubhojak/PromiseJS

关于javascript - PubSub.js 多个订阅,或处理等待多个回调的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com