Я пытаюсь запустить несколько наблюдаемых в последовательности, сохраняя их значения, но мне трудно обернуть голову вокруг правильного способа сделать это.
Абстрактная схема того, что я попытаться сделать это - создать "FruitBasket", сначала создав яблоки, а затем создавая груши, по порядку.
createApples: Observable<Apple[]> {
// creates apples...
}
createPears: Observable<Pear[]> {
// creates pears...
}
createFruitBasket(apples: Apple[], pears: Pear[]): Observable<FruitBasket>
{
// create a fruit basket
}
Я бы хотел, чтобы создание яблок было завершено до попытки создания груш, и создание груш должно быть завершено до попытки создания корзины с фруктами.
Используя асинхронную / ожидающую запись, желаемый результат будет:
makeABasket() {
let apples = await createApples();
let pears = await createPears();
let fruitBasket = await createFruit(apples, pears);
}
В качестве первой попытки я придумайте следующее:
makeABasket() {
let apples: Apple[] = [];
let pears: Pear[] = [];
let basket: FruitBasket;
this.createApples().subscribe((newApples) => {
apples = apples.concat(newApples);
this.createPears().subscribe((newPears) => {
pears = pears.concat(newPears);
this.createFruitBasket(apples, pears).subscribe((newBasket) => {
basket = newBasket;
});
});
});
}
Я знаю, что есть лучший способ сделать это, используя операторы Rx JS, но я не могу выбрать правильный путь. Обратите внимание, что я не хочу использовать forkJoin
, поскольку хочу, чтобы функции создания выполнялись последовательно, а не параллельно.
Заранее благодарен за любые предложения.