【问题标题】:forkJoin on two inputsforkJoin 在两个输入上
【发布时间】:2017-12-30 17:35:10
【问题描述】:

我有两个输入字段,街道地址邮政编码,它们每个都在 keyup 上发出它的值作为主题(Angular 的事件发射器)。

我希望在使用它们调用 API 端点之前让这两个发射器值都有效。

第一个可观察的,街道地址

this.searchableComponent.value
            .do((value: any) => {
                if (value.length < this.MINIMAL_LENGTH_FOR_SEARCH) {
                    this.suggestions = [];
                }
            })
            .filter(() => this._zipcodeModel !== undefined && this._zipcodeModel.city.length > 0)
            .filter((value: any) => value.length >= this.MINIMAL_LENGTH_FOR_SEARCH)
            .debounceTime(this.DEBOUNCE_TIME_IN_MS)
            .distinctUntilChanged()
            .do(() => console.log('ready street address'))

第二个可观察到的邮编

this.zipcodeInput.value
        .filter((value: string) => {
            const pattern = new RegExp(US_ZIPCODE);

            return pattern.test(value);
        })
        .distinctUntilChanged()
        .mergeMap((zipcode: string) => this.addressService.lookup(zipcode))
        .map((zipcodeModel: ZipcodeModel) => this._zipcodeModel = zipcodeModel)
        .do(() => console.log('ready zipcode'))

要测试的简单forkJoin(与 combineLatest 尝试相同的实现):

forkJoin(this.searchableComponent.value, this.zipcodeInput.value)
            .subscribe((results: any) => {
                console.log(results)
            })

我尝试在两个可观察对象上使用forkJoin,尽管它们中的任何一个可观察对象似乎都没有发出任何东西。 在第一个 observable 有效并完成后尝试使用 combineLatest 时,它们的组合会在第二个 observable 的每次发出(即使无效)时完成。

当所有观察者都完成后,实现多个观察者完成的正确方法是什么?

【问题讨论】:

  • 尝试 forkjoin 整个流,而不仅仅是 .value
  • .value 是流,它是一个Subject
  • forkJoin 在其所有源 observables 完成之前不会发出。
  • 两个输入都包含有效值,但它们都不会发出(console.log 调用不会产生)

标签: javascript angular typescript rxjs


【解决方案1】:

我找到了使用withLatestFrom 的解决方案。

通过将.withLatestFrom(this.zipcodeInput.value) 添加到可观察的街道地址,我设法创建了我想要的依赖项。

仍然不明白为什么forkJoin 没有成功。

【讨论】:

  • forkJoin 不起作用,因为 forkJoin 仅在所有源 observables complete 之后发出。源不完整,它们只是在 keyup 上发出值
猜你喜欢
  • 2018-07-28
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 2018-01-16
  • 2018-10-30
  • 1970-01-01
相关资源
最近更新 更多