我的问题是下一个:我想取消我的应用程序的点赞功能。我使用操作在我的应用程序中进行更改,例如:
dispatch(likePost(1)) // => dispatch({ type: 'LIKE_POST', id: 1 })
给出下一个例子:
我在时间:0 发送一个操作
dispatch(likePost(1))
这会触发我的行动来源:
actionSource$.
pipe(
filter(isActionOf(likePost)),
debounceTime(500)
mapTo('make-api-request-to-like-the-post')
)
所以它会看起来像:
--DISPATCH(LIKE(1))---DEBOUNCE(500)---MAKE_API_CALL(1)---->
但这有一个问题,如果我采取下一步行动会发生什么:
dispatch(likePost(1)) // at time 0ms
dispatch(likePost(2)) // at time 200ms
这里我们遇到了一个问题,因为 likePost(2) 对 likePost(1) 进行了反跳,导致仅使用 likePost(2) 发出请求
--DISPATCH(LIKE(1))--200ms--DISPATCH(LIKE(2))--DEBOUNCE(500)--MAKE_API_CALL(2)--->
那么我怎样才能通过 id 去抖动,或者通过 id 使其成为唯一的分支。
You can groupBy https://rxjs-dev.firebaseapp.com/api/operators/groupBy事件由id
然后申请去抖时间 https://rxjs-dev.firebaseapp.com/api/operators/debounceTime分别对每个组进行。
例如:
const { of } = rxjs; // = require("rxjs")
const { map, mergeMap, groupBy, debounceTime } = rxjs.operators; // = require("rxjs/operators")
of(1, 1, 2, 3, 1, 1).pipe(
groupBy(id => id),
mergeMap(likeById$ =>
likeById$.pipe(
debounceTime(500)
)
)
).subscribe(e => console.log(e));
<script src="https://unpkg.com/[email protected] /cdn-cgi/l/email-protection/bundles/rxjs.umd.min.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)