来自、管道和映射可观察逻辑?

问题描述 投票:0回答:1

我试图更好地理解概念或 RxJS,这是一个简单的例子,我不确定我是否理解正确:

from([1,2,3,]).pipe(
map((data)=>{
    console.log(data,'map');
    return data
  })
)
.subscribe(data=>console.log(data, 'from subscribe'))
/*
1 map
1 from subscribe
2 map
2 from subscribe
3 map
3 from subscribe
*/


   

我认为会发生以下情况:

  1. 当我们调用
    subscribe
    时,首先
    map
    订阅
    from
    Observable。
  2. from
    发出的每个值都会被控制台记录并作为单独的Observable从
    map
    发出。所以,在这种情况下,我们将有 3 个 Observables。
  3. .subscribe
    订阅来自
    map
    的每个 Observable(解析为 1 的 Observable,解析为 2 的另一个 Observable,...),我们看到另一个日志。

查看文档后,我认为我目前对事物运作方式的理解出现了问题。

如果有人可以确认或更正我在问题中描述的逻辑,我将不胜感激。

angular rxjs
1个回答
1
投票
  • from
    -> 将数组转换为可观察值流,并逐一发出。
  • map
    -> 访问可观察值的值,如果需要,您可以选择转换数据,输入参数不是可观察值,输出值也不是可观察值。
  • subscribe
    -> 对于每个发出的值,都会调用订阅下一个块(传递的函数。

订阅有三个部分,订阅有三个参数。

  • next
    -> 当 observable 发出一个值时调用,将在每次发出时继续调用,直到 observable 完成
  • error
    -> 当可观察流出现错误时调用,可能是无意的(编码错误)或手动错误
    throw new Error('failed')
  • complete
    -> 一旦可观察流完成就会被调用。

在您的示例中,下一个块被调用三次(在您的例子中是console.log),最后调用完整的块。为了更好地理解它,这里有一个突出显示相同内容的工作示例!

import './style.css';

import { rx, of, map, from } from 'rxjs';

from([1, 2, 3])
  .pipe(
    map((data) => {
      console.log(data, 'map');
      return data;
    })
  )
  .subscribe({
    next: (data: any) => {
      console.log(data, 'from subscribe next');
    },
    error: (data: any) => {
      console.log(data, 'from subscribe error');
    },
    complete: () => {
      console.log('from subscribe complete');
    },
  });

堆栈闪电战

© www.soinside.com 2019 - 2024. All rights reserved.