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.
