typescript - ვერ გადაცემდე მნიშვნელობას mergeMap-ის შემდეგ Redux Observable-თან


მე მაქვს ზუსტად ასეთი საბაზისო კოდი ქვემოთ (სრულიად ფუნქციური), რომელიც თქვენ აქ ასევე შეგიძლიათ ნახოთ:

https://stackblitz.com/edit/typescript-mergemap-deprecated?file=index.ts

import { merge, of } from "rxjs";
import { mergeMap, map, tap } from "rxjs/operators";

const loadQuestion = () =>
  new Promise(resolve => resolve({
    title: 'How are you?',
    options: [ 'Excellent', 'Good', 'Bad' ],
  }))
;

const action$ = of({
  payload: {
    eventName: 'AskQuestionEvent'
  }
});

action$.pipe(
  mergeMap(action => merge(
    of(action).pipe(
      tap(({ payload: eventName }) => {
        console.log(eventName);
      }),
      map(({ payload: { eventName} }) => eventName),
      mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
        eventName,
        questionImport
      })),
      map(({ eventName, questionImport }) => ({
        eventName,
        question: questionImport
      })),
      tap(({ eventName, question }) => {
        console.log(eventName);
        console.log(question);
      }),
    ),
  )),
).subscribe();

ამ მიდგომამ მუშაობა აკეთებს როგორც მოსალოდნელი იყო, მაგრამ ჩემი პრობლემა ის არის, რომ შიდა mergeMap ჩანს მოძველებული.

მ მიიღება შეცდომა:

@deprecated — resultSelector no longer supported, use inner map instead

როგორც ხედავთ ქვედა გამოსახულებაზე:

გაქვს რაიმე იდეა, როგორ მოიშორო ეს გაფრთხილება ან აღინიშნება გატყინი?

თუ შესაძლებელია, შეიძლება გთხოვდეთ აღინიშნოთ ჩემი StackBlitz ზემოთ და გამოიყენოთ თქვენი მიდგომა?

წინასწარ გმადლობთ!

უპასუხე #1

დეპრექაციის გაფრთხილების აღსაჭრელად, საჭიროა შეწყვიტოთ resultSelector პარამეტრის გამოყენება.

თქვენი კოდი resultSelector-ით:

mergeMap(() => loadQuestion(), (eventName, questionImport) => ({
  eventName,
  questionImport
})),

განახლებული კოდი გარეშე: StackBlitz

mergeMap(eventName => from(loadQuestion()).pipe(
  map(questionImport => ({eventName, questionImport}))
)),

პ.ს. -თქვენ არ გჭირდებათ თქვენი მეორე map, თუ უბრალოდ თქვენს questionImport-ს დაარქმევთ უბრალოდ question: StackBlitz #2.