Слияние двух наблюдаемых разных типов

У меня есть следующие функции:

  getNetworkByName(prefix: string): Observable<Network[]> {
return this.http.get<Network[]>(this.Url + '/networks/search?name-prefix=' + prefix)
  .catch(handleError); }

а также

getNetwork(id: number): Observable<Network> {
return this.http.get<Network>(this.Url + '/networks/' + id)
  .catch(handleError); }

Я хотел бы иметь еще одну функцию, например getNetworkByNameAndId(prefix: string | number): observable<network[]>, которые объединяют результат предыдущей функции. Я пробовал оператор слияния, но не работал из-за разных типов.

Как это можно эффективно решить без подписки на functions. Мне нужно решить это во фронтенде. В некоторых случаях мое сетевое имя может быть 1 и 1, также сетевой идентификатор может быть внутренне 1, поэтому я хотел бы выполнить поиск на основе имени и идентификатора. Я сделал примерно так:

return this.getNetworkByName(prefix.toString()).pipe(merge(this.getNetwork(parseInt(prefix,10))); 

Я получаю ошибку

Type 'Observable<Network | Network[]>' is not assignable to type 'Observable<Network[]>'.

С Уважением

У вас могут быть разные типы с merge, опубликуйте свою попытку и давайте посмотрим, что мы можем с этим сделать (см. пример)

bugs 24.05.2018 13:43

недостаточно информации, ваша 3-я функция говорит, что это может быть и то, и другое, а это означает, что можно будет использовать одну из двух заданных функций ... Как вы ожидаете вызвать обе 1 arg?

Mike Tung 24.05.2018 15:13

В некоторых случаях мое сетевое имя может быть 1 и 1, также сетевой идентификатор может быть внутренне 1, поэтому я хотел бы выполнить поиск на основе имени и идентификатора. Я сделал что-то вроде этого: вернуть this.getNetworkByName (prefix.toString ()). Pipe (merge (this.get‌ Network (parseInt (pre‌ fix, 10)));

Adam 24.05.2018 15:36
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
3
288
1

Ответы 1

Может быть, примерно так:

getNetworkByNameAndId(name : string, id : number): Observable<Network[]> {
    return Observable.forkJoin(
        getNetworkByName(name),
        getNetwork(id)
    ).map(([a, b]) => [...a, b]);
}
OP упоминает префиксный аргумент ... вы не должны выполнять его работу за него, учитывая, что он не сообщил нам достаточно информации о том, где он застрял
Mike Tung 24.05.2018 15:15

Предоставленный ответ отлично работает, я мог делать то, что хочу, с помощью forkjoin

Adam 24.05.2018 15:54

Другие вопросы по теме