Конкат дает предупреждения и не выполнит - PullRequest
2 голосов
/ 19 марта 2019

Следующий метод, с forkJoin работает нормально, но.,.

unifiedSearch : Function = (query: string) : Observable<UnifiedSearch> => {
  return forkJoin(this.searchService.gitSearch(query), this.codeSearchService.codeSearch(query))
  .map( (response : [GitSearch, GitCodeSearch]) => {
    return {
      'repositories' : response[0],
      'code': response[1]
    }
  })
}

.,,Я попытался преобразовать его, чтобы использовать concat как часть задания, но пока он компилируется, я получаю кучу предупреждений, и в браузере ничего не отображается.

unifiedSearch : Function = (query: string) : Observable<UnifiedSearch> => {
  return concat(this.searchService.gitSearch(query), this.codeSearchService.codeSearch(query))
  .map( (response) => {
    return {
      'repositories' : response[0],
      'code': response[1]
    }
  })
}

Для справки, вотИнтерфейс «UnifiedSearch»:

import {GitSearch} from './git-search';
import { GitCodeSearch } from './git-code-search';

export interface UnifiedSearch {
    repositories: GitSearch,
    code: GitCodeSearch
}

Если полезно, я получаю предупреждения:

./node_modules/rxjs/Observable/of.js There are multiple modules with names that only differ in casing. This can lead to unexpected behavior when compiling on a filesystem with other case-semantic. Use equal casing. Compare these module identifiers: * C:\Users\Johnathan\advanced_angular\node_modules\rxjs\Observable\of.js Used by 1 module(s), i. e. C:\Users\Johnathan\advanced_angular\node_modules\rxjs\Observable\concat.js * C:\Users\Johnathan\advanced_angular\node_modules\rxjs\observable\of.js Used by 2 module(s), i. e. C:\Users\Johnathan\advanced_angular\node_modules\@angular\common\@angular\common\http.es5.js

Любые идеи, почему версия concat не делаетРабота?Tks!

1 Ответ

1 голос
/ 19 марта 2019

concat и forkJoin работают немного по-разному.

concat испускает каждое значение из каждого источника в порядке emit и в порядке, заданном в качестве аргумента оператора concat.Как только источник завершает работу, он перемещается к следующему в исходном массиве.

forkJoin даст последние испущенные значения каждой наблюдаемой, а затем вернет эти значения в массиве.Он будет ждать, пока все заданные наблюдаемые не завершатся, прежде чем он испустит.

Для примера возьмем следующее:

const source1 = of(1, 2);
const source2 = of(3, 4);


concat(source1, source2).subscribe(v => console.log(v))
// output (each line is new emit)
// 1
// 2
// 3
// 4

forkJoin(source1, source2).subscribe(v => console.log(v))
// output (each line is new emit)
// [2, 4]

Возможно, вы захотите посмотреть, используя combineLatest для объединения излучений из каждого источника и выдачи объединенных последних значений каждый раз, когда излучается одна из наблюдаемых источников.Разница между этим и forkJoin состоит в том, что combineLatest излучает каждый раз, когда исходные наблюдаемые излучают, тогда как forkJoin излучает только после того, как все исходные наблюдаемые завершены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...