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

    let

    签名: let(function): Observable

    让我拥有完整的 observable 。

    let - 图1

    示例

    示例 1: 使用 let 重用错误处理逻辑

    ( jsBin |
    jsFiddle )

    1. // 自定义错误处理逻辑
    2. const retryThreeTimes = obs =>
    3. obs.retry(3).catch(_ => Rx.Observable.of('ERROR!'));
    4. const examplePromise = val =>
    5. new Promise(resolve => resolve(`Complete: ${val}`));
    6. // 伪造的请求
    7. const subscribe = Rx.Observable.of('some_url')
    8. .mergeMap(url => examplePromise(url))
    9. // 能够在使用 let 的多个地方重用错误处理逻辑
    10. .let(retryThreeTimes)
    11. // 输出: Complete: some_url
    12. .subscribe(result => console.log(result));
    13. const customizableRetry = retryTimes => obs =>
    14. obs.retry(retryTimes).catch(_ => Rx.Observable.of('ERROR!'));
    15. // 伪造的请求
    16. const secondSubscribe = Rx.Observable.of('some_url')
    17. .mergeMap(url => examplePromise(url))
    18. // 能够在使用 let 的多个地方重用错误处理逻辑
    19. .let(customizableRetry(3))
    20. // 输出: Complete: some_url
    21. .subscribe(result => console.log(result));
    示例 2: 使用 let 应用于 map

    ( jsBin |
    jsFiddle )

    1. // 将数组作为序列发出
    2. const source = Rx.Observable.from([1, 2, 3, 4, 5]);
    3. // 演示 let 和其他操作符间的区别
    4. const test = source
    5. .map(val => val + 1)
    6. /*
    7. 取消下面一行的注释会导致失败,let 的行为不同于大多数操作符
    8. val 在这里是 observable
    9. */
    10. //.let(val => val + 2)
    11. .subscribe(val => console.log('VALUE FROM ARRAY: ', val));
    12. const subscribe = source
    13. .map(val => val + 1)
    14. // 'let' 会让你拥有整个的 observable
    15. .let(obs => obs.map(val => val + 2))
    16. // 输出: 4,5,6,7,8
    17. .subscribe(val => console.log('VALUE FROM ARRAY WITH let: ', val));
    示例 3: 使用 let 应用于多个操作符

    ( jsBin |
    jsFiddle )

    1. // 将数组作为序列发出
    2. const source = Rx.Observable.from([1, 2, 3, 4, 5]);
    3. // let 提供了灵活性,可以将多个操作符添加到源 observale,然后返回
    4. const subscribeTwo = source
    5. .map(val => val + 1)
    6. .let(obs =>
    7. obs
    8. .map(val => val + 2)
    9. // 还可以只返回偶数
    10. .filter(val => val % 2 === 0)
    11. )
    12. // 输出: 4,6,8
    13. .subscribe(val => console.log('let WITH MULTIPLE OPERATORS: ', val));
    示例 4: 通过函数应用于操作符

    ( jsBin |
    jsFiddle )

    1. // 将数组作为序列发出
    2. const source = Rx.Observable.from([1, 2, 3, 4, 5]);
    3. // 传入你自己的函数来将操作符添加到 observable
    4. const obsArrayPlusYourOperators = yourAppliedOperators => {
    5. return source.map(val => val + 1).let(yourAppliedOperators);
    6. };
    7. const addTenThenTwenty = obs => obs.map(val => val + 10).map(val => val + 20);
    8. const subscribe = obsArrayPlusYourOperators(addTenThenTwenty)
    9. // 输出: 32, 33, 34, 35, 36
    10. .subscribe(val => console.log('let FROM FUNCTION:', val));

    其他资源

    • let :newspaper: - 官方文档

    :file_folder: 源码: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/let.ts