gpt4 book ai didi

javascript - 为什么水龙头运算符(operator)会影响水流?

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

出于某种原因,使用 Tap 运算符会改变流的输出(实际上提供了我预期的结果)。当我移除水龙头时,后续过滤器似乎不再起作用。

我已经在codesandbox上使用

运行了下面的代码
  tap(([prevMouseEvent, currentMouseEvent]) =>
console.log(directionChange(prevMouseEvent, currentMouseEvent))
),

包含并注释掉。如果没有点击,后续过滤器似乎无法工作,并且我会得到持续的配对鼠标事件流。

// Returns true if the predominant movement in the mouse has changed direction
const directionChange = (prevMouseEvent, currentMouseEvent) => {
const dominantAxisMovement =
Math.abs(currentMouseEvent.movementX) >
Math.abs(currentMouseEvent.movementY) ? "X" : "Y";

if (dominantAxisMovement === "X") {
return (
Math.sign(currentMouseEvent.movementX) !==
Math.sign(prevMouseEvent.movementX)
);
} else {
return (
Math.sign(currentMouseEvent.movementY) !==
Math.sign(prevMouseEvent.movementY)
);
}
};

const mouseDirectionSwitch$ = fromEvent(document, "mousemove").pipe(
pairwise(),
tap(([prevMouseEvent, currentMouseEvent]) =>
console.log(directionChange(prevMouseEvent, currentMouseEvent))
),
filter(([prevMouseEvent, currentMouseEvent]) =>
directionChange(prevMouseEvent, currentMouseEvent)
)
);

mouseDirectionSwitch$.subscribe(passed => console.log(passed));

我想要实现的是一个仅在用户改变鼠标移动方向时发出的可观察对象(我所说的改变移动是指从上到下、从左到右,而不是细微的变化)。使用水龙头它可以工作,但任何人都可以解释为什么这里需要水龙头运算符(operator)才能获得所需的输出?我认为 tap 运算符返回了相同的可观察值,因此对其所在流的输出没有影响。

最佳答案

感谢您的建议。雅各布 - 你的建议让我在自己的独立项目中重新创建了这个......并且效果很好。所以我关闭了所有东西并重新打开了原来的项目,结果发现它成功了。我真的不确定为什么它以前不起作用(尽管刷新整个页面以刷新任何剩余的事件处理程序),但古老的“您是否尝试过重新启动计算机”是我真正需要的。感谢您的想法!

关于javascript - 为什么水龙头运算符(operator)会影响水流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775174/

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