我正在试验 RxJS(带有 JQuery 扩展),我正在尝试解决以下用例:
鉴于我有两个按钮(A 和 B),如果在给定的时间范围内单击某个“秘密组合”,我想打印一条消息。例如,“秘密组合”可以是在 5 秒内点击“ABBABA”。如果在 5 秒内未输入该组合,则应显示超时消息。这是我目前拥有的:
var secretCombination = "ABBABA";
var buttonA = $("#button-a").clickAsObservable().map(function () { return "A"; });
var buttonB = $("#button-b").clickAsObservable().map(function () { return "B"; });
var bothButtons = Rx.Observable.merge(buttonA, buttonB);
var outputDiv = $("#output");
bothButtons.do(function (buttonName) {
outputDiv.append(buttonName);
}).bufferWithTimeOrCount(5000, 6).map(function (combination) {
return combination.reduce(function (combination, buttonName) {
return combination + buttonName;
}, "");
}).map(function (combination) {
return combination === secretCombination;
}).subscribe(function (successfulCombination) {
if (successfulCombination) {
outputDiv.html("Combination unlocked!");
} else {
outputDiv.html("You're not fast enough, try again!");
}
});
虽然这工作得很好,但这并不是我想要的。bufferWithTimeOrCount
在新的时间范围内第一次按下按钮 A 时,我需要重置 。我正在寻找的是,一旦按下秘密组合(ABBABA),我就会想要“组合解锁!” 显示(我不想等待时间窗口过期)。