- let
- 签名:
let(function): Observable
- 签名:
- 让我拥有完整的 observable 。
- 示例
- 示例 1: 使用 let 重用错误处理逻辑
- 示例 2: 使用 let 应用于 map
- 示例 3: 使用 let 应用于多个操作符
- 示例 4: 通过函数应用于操作符
- 示例
- 其他资源
let
签名: let(function): Observable
让我拥有完整的 observable 。

示例
示例 1: 使用 let 重用错误处理逻辑
( jsBin |
jsFiddle )
// 自定义错误处理逻辑const retryThreeTimes = obs =>obs.retry(3).catch(_ => Rx.Observable.of('ERROR!'));const examplePromise = val =>new Promise(resolve => resolve(`Complete: ${val}`));// 伪造的请求const subscribe = Rx.Observable.of('some_url').mergeMap(url => examplePromise(url))// 能够在使用 let 的多个地方重用错误处理逻辑.let(retryThreeTimes)// 输出: Complete: some_url.subscribe(result => console.log(result));const customizableRetry = retryTimes => obs =>obs.retry(retryTimes).catch(_ => Rx.Observable.of('ERROR!'));// 伪造的请求const secondSubscribe = Rx.Observable.of('some_url').mergeMap(url => examplePromise(url))// 能够在使用 let 的多个地方重用错误处理逻辑.let(customizableRetry(3))// 输出: Complete: some_url.subscribe(result => console.log(result));
示例 2: 使用 let 应用于 map
( jsBin |
jsFiddle )
// 将数组作为序列发出const source = Rx.Observable.from([1, 2, 3, 4, 5]);// 演示 let 和其他操作符间的区别const test = source.map(val => val + 1)/*取消下面一行的注释会导致失败,let 的行为不同于大多数操作符val 在这里是 observable*///.let(val => val + 2).subscribe(val => console.log('VALUE FROM ARRAY: ', val));const subscribe = source.map(val => val + 1)// 'let' 会让你拥有整个的 observable.let(obs => obs.map(val => val + 2))// 输出: 4,5,6,7,8.subscribe(val => console.log('VALUE FROM ARRAY WITH let: ', val));
示例 3: 使用 let 应用于多个操作符
( jsBin |
jsFiddle )
// 将数组作为序列发出const source = Rx.Observable.from([1, 2, 3, 4, 5]);// let 提供了灵活性,可以将多个操作符添加到源 observale,然后返回const subscribeTwo = source.map(val => val + 1).let(obs =>obs.map(val => val + 2)// 还可以只返回偶数.filter(val => val % 2 === 0))// 输出: 4,6,8.subscribe(val => console.log('let WITH MULTIPLE OPERATORS: ', val));
示例 4: 通过函数应用于操作符
( jsBin |
jsFiddle )
// 将数组作为序列发出const source = Rx.Observable.from([1, 2, 3, 4, 5]);// 传入你自己的函数来将操作符添加到 observableconst obsArrayPlusYourOperators = yourAppliedOperators => {return source.map(val => val + 1).let(yourAppliedOperators);};const addTenThenTwenty = obs => obs.map(val => val + 10).map(val => val + 20);const subscribe = obsArrayPlusYourOperators(addTenThenTwenty)// 输出: 32, 33, 34, 35, 36.subscribe(val => console.log('let FROM FUNCTION:', val));
其他资源
- let
- 官方文档
源码: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/let.ts
