Skip to content

map

数据转换操作符,使用投影函数对源流中的每个值进行转换,并将转换后的值推送到下游。

image

类型定义

typescript
type map = <T, R>(
  project: (value: T) => R | PromiseLike<R>
) => (observable$: Observable<T>) => Observable<R>

参数说明

  • project: 投影函数,接收源流的值并返回转换后的值,支持同步和异步返回值

详情

  • 每次源流发出值时,都会执行投影函数进行转换
  • 支持同步和异步(Promise)转换

示例

同步转换

typescript
import { $, map } from 'fluth'

const stream$ = $()
const mapped$ = stream$.pipe(map((value: number) => value * 2))

mapped$.then((value) => {
  console.log('mapped:', value)
})

stream$.next(1) // 输出: mapped: 2
stream$.next(2) // 输出: mapped: 4

异步转换

typescript
import { $, map } from 'fluth'

const stream$ = $()
const mapped$ = stream$.pipe(map((value: string) => Promise.resolve(`${value}-async`)))

mapped$.then((value) => {
  console.log('async-mapped:', value)
})

stream$.next('a') // 输出: async-mapped: a-async

错误处理

typescript
import { $, map } from 'fluth'

const stream$ = $()
const mapped$ = stream$.pipe(
  map((value: string) => {
    if (value === 'error') throw new Error('map-error')
    return value
  })
)

mapped$.then(
  (value) => console.log('resolved:', value),
  (err) => console.log('rejected:', err.message)
)

stream$.next('error') // 输出: rejected: map-error
stream$.next('ok') // 输出: resolved: ok