gpt4 book ai didi

javascript - rxjs 中的 flatMap、mergeMap、switchMap 和 concatMap?

转载 作者:行者123 更新时间:2023-12-02 04:42:13 26 4
gpt4 key购买 nike

有人,请用Javascript解释SwitchMap和FlatMap之间的区别(从 Angular 来看,rxjs 5)
在我的理解中。
切换 map 只发出最新的 observable 值并取消之前的 observable。
平面 map 收集所有单独的 observables 并在单个数组中返回所有 observables,而不关心 observable 的顺序。异步工作。
连接 map 保持顺序并发出所有可观察值,同步工作
那正确吗?
mergeMap 与上面的工作方式有何不同?
有人,请举例说明。

最佳答案

取自 previous answer :

  • flatMap/mergeMap - 立即为任何源项目创建一个 Observable,所有以前的 Observable 都保持事件状态。备注 flatMapmergeMap 的别名和 flatMap将在 RxJS 8 中删除。
  • 连接 map - 等待前一个 Observable 完成后再创建下一个
  • 切换 map - 对于任何源项,完成前一个 Observable 并立即创建下一个
  • 排气 map - 在前一个 Observable 未完成时忽略源项目

  • 下面是一个示例,说明当源是直接项 (0,1,2,3,4) 并且 map 函数创建一个将每个项延迟 500 毫秒的 Observable 时,每个运算符的行为方式:

    const { mergeMap, flatMap, concatMap, switchMap, exhaustMap } = Rx.operators;

    const example = operator => () =>
    Rx.Observable.from([0,1,2,3,4])
    .pipe(
    operator(x => Rx.Observable.of(x).delay(500))
    )
    .subscribe(console.log, () => {}, () => console.log(`${operator.name} completed`));

    const mm = example(mergeMap);
    const fm = example(flatMap);
    const cm = example(concatMap);
    const sm = example(switchMap);
    const em = example(exhaustMap);
    .examples > div {
    cursor: pointer;
    background-color: #4CAF50;
    color: white;
    padding: 7px 16px;
    display: inline-block;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.8/Rx.js"></script>

    <div class='examples'>
    <div onClick='mm()'>mergeMap </div>
    <div onClick='fm()'>flatMap</div>
    <div onClick='cm()'>concatMap</div>
    <div onClick='sm()'>switchMap</div>
    <div onClick='em()'>exhaustMap</div>
    </div>

    关于javascript - rxjs 中的 flatMap、mergeMap、switchMap 和 concatMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49698640/

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