我有3个流。 (1)gradingResult
和contextId
是依赖studentResponse
的ajax请求。 (2)对于每个studentResponse
值,我需要使用studentResponse
值和其他两个流的相应结果来触发事件。
这个问题与Wait for latest values from dependent streams in BaconJS?相似但不同。一个关键的区别是我不知道gradingResult
和contextId
中的哪一个将首先返回。
关于代码的说明:代码基于生产代码。我无权访问gradingResult
或contextId
。我所知道的是,他们是从studentResponse
获取输入的ajax请求。
一些具有所需输出的示例代码:
function _fauxAjax(val) {
return Bacon.fromBinder(function(sink) {
setTimeout(function() {
sink(val);
sink(new Bacon.End());
}, Math.random()*1000);
return function() {}
});
}
var studentResponse = new Bacon.Bus();
var gradingResult = studentResponse.flatMap(_fauxAjax);
var contextId = studentResponse.flatMap(_fauxAjax);
鉴于此输入:
studentResponse.push(1);
studentResponse.push(2);
studentResponse.push(3);
期望的输出:
{studentResponse:1, gradingResult:1, contextId:1 }
{studentResponse:2, gradingResult:2, contextId:2 }
{studentResponse:3, gradingResult:3, contextId:3 }
答案 0 :(得分:2)
如果将后两个ajax请求定义为独立流,我没有看到确保值相关的实用解决方案。
因此,要确保您获得由同一gradingResult
触发的contextId
和studentResponse
响应,我会说您必须执行以下操作:
studentResponse.flatMap(function(response) {
return Bacon.combineTemplate({
studentResponse: response,
gradingResult: _fauxAjax(response),
contextId: _fauxAjax(response)
})
}).log()