所以这就是问题 - 我有一个系统,当事件发生时,会触发一系列不同的异步代码(某些代码甚至会触发更多事件)。
现在在验收测试期间我触发了相同的事件 - 但是应该使用什么策略来通知测试运行员所有后续事件都已完成并准备好继续下一步?
我开始只是等待固定的时间 - 但我总是只是一个软糖。 而现在,我正在接触尾部事件,并在它们全部完成后继续前进。但随着系统的发展,我可以看到这变得越来越复杂。
只是想知道是否有一个我错过的替代策略。有什么建议吗?
FWIW我正在使用cucumber.js& zombie来测试express上的node.js应用。
欢呼并感谢您的时间,
戈登
答案 0 :(得分:1)
显然,解决方案将根据应用程序的不同而有所不同,但我发现以这样一种方式构建我的应用程序是有帮助的,即顶级异步函数的回调一直被跟踪到最后。完成所有顶级回调后,您可以触发一些事件或调用一些表示一切都结束的回调。使用像async's parallel
之类的东西,你可能会做这样的事情:
eventEmitter.on('someEvent', function(some, data, callback) {
async.parallel([
function(cb) { firstAsyncThing(some, cb); },
function(cb) { secondAsyncThing(data, cb); }
], function(err, results) {
// called when all functions passed in the array have their `cb` called
callback(err, results);
});
});
那么你可以将回调传递给你的事件:
eventEmitter.emit('someEvent', 'some', 'data', function(error, results) {
// the event has been fully handled
});