для таких, как я, у которых были тайм-ауты. Я сделал следующее, чтобы использовать лимиты и что-то еще по определенной группе.
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 каждый
Я не уверен, что правильно понимаю ваш вопрос, но кажется, что вы ищете способ объединить 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}