RxJS - сопоставить испущенное значение с комбинированным выводом нескольких запросов Http

Команда mov dword [esp], 0x80486b2 перемещает 32-битное мгновенное значение 0x80486b2 в 32-разрядную ячейку памяти, на которую указывает ESP. Если он переместил 32-битное значение при сохранении адреса 0x80486b2 в пункт назначения, он будет записан как mov dword [esp], dword [0x80486b2]. Однако это не допустимая комбинация операндов для инструкции MOV.

Обратите внимание, что в вашей разборке используется синтаксис NASM.

2
задан fridoo 19 January 2019 в 09:56
поделиться

2 ответа

Используйте forkJoin , чтобы выполнить и объединить весь ваш http-запрос, и mergeMap массив, отправленный из вашего источника в Observable, возвращенный forkJoin. forkJoin объединит последние (и только) переданные значения из всех ваших http-запросов в массив после того, как все они будут выполнены. Обратите внимание, что requestNum должно завершиться после выдачи значения для forkJoin для работы. (Http-запрос от Angular HttpClient завершается после того, как они передают значение)

В зависимости от вашего Observable x и желаемого поведения вы можете использовать switchMap вместо mergeMap. [ 1112]

import { forkJoin } from 'rxjs'; 
import { mergeMap } from 'rxjs/operators';

serverNums : Observable<number[]> = x.pipe(
    mergeMap(num_array => forkJoin(num_array.map(n => requestNum(n))))
);
0
ответ дан fridoo 19 January 2019 в 09:56
поделиться

Вы не объяснили, какова структура интерфейса данных, поэтому я могу предположить, что из массива:

[1,2,3]

вы хотите создать объект:

{1:1, 2:2, 3:3}.

[ 118] (если вы опубликуете свой интерфейс данных, я обновлю ответ соответствующим образом).


Чтобы создать объект из массива, вы можете использовать уменьшать :

x.pipe(reduce((pre,curr)=>{pre[curr]=curr; return pre;}, {})

Пипсы начинаются с пустого объекта ({}) и в каждом Итерация добавляет свойство pre [curr] к этому объекту и устанавливает его как curr.

  • pre - предыдущее значение из последней итерации
  • curr - текущее значение текущей итерации (1, 2 или 3 в приведенный выше пример)

РЕДАКТИРОВАТЬ:

Вам нужно выровнять Observable<Observable<number>> и Observable<number>, используя mergeMap (AKA flatMap): [1117 ]

serverNums : Observable<Observable<number>[]> = x.pipe(
    map(num_array => num_array.map(n => requestNum(n)),
    mergeMap(num=>num)
)

это создаст все значения requestNum (n) в одной наблюдаемой типа Observable.

0
ответ дан rotemx 19 January 2019 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: