Угловые RXJS множественные HTTP-вложенные запросы

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

DELIMITER $$
CREATE PROCEDURE count_limit200()
BEGIN
    DECLARE a INT Default 0;
    DECLARE stop_loop INT Default 0;
    DECLARE domain_val VARCHAR(250);
    DECLARE domain_list CURSOR FOR SELECT DISTINCT domain FROM db.one;

    OPEN domain_list;

    SELECT COUNT(DISTINCT(domain)) INTO stop_loop 
    FROM db.one;
    -- BEGIN LOOP
    loop_thru_domains: LOOP
        FETCH domain_list INTO domain_val;
        SET a=a+1;

        INSERT INTO db.two(book,artist,title,title_count,last_updated) 
        SELECT * FROM 
        (
            SELECT book,artist,title,COUNT(ObjectKey) AS titleCount, NOW() 
            FROM db.one 
            WHERE book = domain_val
            GROUP BY artist,title
            ORDER BY book,titleCount DESC
            LIMIT 200
        ) a ON DUPLICATE KEY UPDATE title_count = titleCount, last_updated = NOW();

        IF a = stop_loop THEN
            LEAVE loop_thru_domain;
        END IF;
    END LOOP loop_thru_domain;
END $$

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

0
задан Marco Altieri 13 July 2018 в 20:12
поделиться

1 ответ

Я не уверен, что правильно понимаю ваш вопрос, но кажется, что вы ищете способ объединить 2 последующих HTTP-вызова, а второй потребует некоторых данных, возвращаемых первым. Кроме того, вы хотите запустить многие из таких цепочечных вызовов параллельно.

Если это так, это может быть способ приблизиться к нему.

getSaleIds(): Observable<string[]>;

getSale(id: string): Observable<Sale> {
  // calls and http service and returns a Sale for a certain id
  // each Sale contains a productId to be used in the subsequent call
}

getProduct(productId: string): Observable<Product> {
  ...
}

getSaleAndThenProduct(saleId: string) {
  return getSale(saleId).pipe(
    switchMap(sale => getProduct(sale.productId),
    map(product => ({sale, product}))
  );
}

getSaleIds()
.pipe(
  map(saleIds => saleIds.map(id => getSaleAndThenProduct(id)),
  switchMap(functions => forkJoin(functions))
)
.subscribe(salesAndProducts => // do something)

salesAndProducts is Массив объектов типа {sale: Sale, product: Product}

0
ответ дан Picci 17 August 2018 в 12:24
поделиться
  • 1
    Спасибо Picci ... В вашем ответе salesId установлен в CONST saleId ... поэтому предполагается, что он уже доступен. Однако мой список всех данных о продажах / продажах возвращается из другой службы http изначально. Может ли этот первый HTTP-вызов быть завернут в ту же логику, или это нужно запросить / avaialbe в первую очередь. приветствует Макс – max 15 July 2018 в 08:15
  • 2
    Я обновил свой ответ – Picci 15 July 2018 в 16:21
Другие вопросы по тегам:

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