Попробуйте
execute("select fact from factoids where key like ?", "%%s%" % val)
Вы вообще ничего не обмениваете вокруг ?
, Python sqlite корректно преобразует его в цитируемый объект.
Если я вас правильно понимаю, то думаю, что это решение. Ваша проблема была с первым map
, который не будет выполнять внутреннюю подписку, а просто преобразует поток в Observables of Observables, который, кажется, не соответствует вашим ожиданиям. Вместо этого я использовал mergeMap
там.
Внутри from
я использовал concatMap, чтобы заставить каждое излучение из first
и second
происходить по порядку и ждать завершения одного, прежде чем начнется другое. Я также настроил функции postToEndpoint
, которые возвращают Observables, чтобы они были ближе к тому, как ваш реальный код, вероятно, будет выглядеть.
StackBlitz Демо
код:
import { mergeMap, concatMap, delay, tap, catchError, toArray } from 'rxjs/operators';
import { merge, of, from, concat, throwError } from 'rxjs';
const single = "name";
const first = ["abc", "def"];
const second = of("ghi", "jkl", "mno");
const postToEndpoint1$ = photo => of(photo).pipe(
tap(data => console.log('start of postTo1 for photo:', photo)),
delay(5000),
tap(data => console.log('end of postTo1 for photo:', photo))
);
const postToEndpoint2$ = video => of(video).pipe(
tap(data => console.log('start of postTo2 for video:', video)),
delay(5000),
tap(data => console.log('end of postTo2 for video:', video))
);
of(single).pipe(
tap(val => console.log(`initial emit:${val}`)),
mergeMap(claim =>
merge(
from(first).pipe(concatMap(postToEndpoint1$)),
from(second).pipe(concatMap(postToEndpoint2$))
)
),
toArray(),
catchError(error => {
console.log("error");
return throwError(error);
})
).subscribe(val => console.log(`final:`, val));
Надеюсь, это поможет.