angular rxjs: параметр доступа при ошибке http внутри pipe / concatMap? - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время я использую pipe и concatMap для объединения нескольких http-запросов, например:

onErrorResumeNext(from(ids))
    .pipe(
        delay(10),
        concatMap(id => get(id))
    )
    .subscribe(res => {
        if (res = emptydata) return id
});

Функция get обрабатывает построение строки запроса из массива идентификаторов, а также содержит retry и catchError.

Теперь проблема в том, что мне нужен доступ к тому же параметру id , если у меня нет данных об объекте ответа.

Есть идеи?

1 Ответ

0 голосов
/ 26 сентября 2018

concatMap (и другие наблюдаемые операторы более высокого порядка) принимают дополнительную функцию селектора результата ( Примечание: это устарело ), которая принимает аргументы выходного значения и входного значения.Это позволяет вам передавать оба потока (например, в виде массива):

onErrorResumeNext(from(ids))
    .pipe(
        delay(10),
        concatMap(id => get(id), (res, id) => ([res, id]))
    )
    .subscribe(([res, id]) => {
        // note that `return` does nothing here
        if (res == emptydata) return id
});

Если get является наблюдаемым, вы также можете вернуть id в контексте, где у вас есть доступ к нему:

concatMap(id => get(id).pipe(
  map(res => res != emptydata ? res : id)
)

Если get равен , а не массивом, вы можете использовать функцию создания Observable, такую ​​как from, чтобы превратить его в массив.

...