Вложенный вызов API в функции генератора (Redux Saga) - PullRequest
0 голосов
/ 10 марта 2020

У меня есть входящее действие с полезной нагрузкой, состоящей из «фотокниг». Эти фотокниги имеют выгруженные изображения с путем API. С помощью вложенных карт-функций я пытаюсь получить и добавить фактическое изображение к объекту. Но это извлечение изображения не разрешается.

У меня есть следующий код:

import { call, put, all } from 'redux-saga/effects';

interface Load {
  type: 'Load';
  payload: {
    photoBooks: PhotoBookWithoutImages[];
  };
}

interface UnloadedImage {
  name: string;
  path: string;
}

interface LoadedImage {
  name: string;
  objectUrl: string;
}

interface PhotoBookWithoutImages {
  name: string;
  images: UnloadedImage[];
}

interface PhotoBookWithImages {
  name: string;
  images: LoadedImage[];
}

function* downloadBlob(path: string) {
  return yield fetch(path);
}

function* fetchImage(image: UnloadedImage) {
  const blob = yield call(downloadBlob, image.path);

  return {
    ...image,
    objectUrl: window.URL.createObjectURL(new File([blob], `image-${name}`)),
  };
}

export function* load(action: Load) {
  const { photoBooks } = action.payload;

  const photoBooksWithImages: PhotoBookWithImages[] = yield all(
    photoBooks.map(photoBook => ({
      ...photoBook,
      images: photoBook.images.map(image => call(fetchImage, image)),
    }))
  );

  yield put(loadOk(photoBooksWithImages));
}

Я ищу правильный способ извлечения данных на более глубоких уровнях объекта.

Может ли кто-нибудь помочь мне в этом вопросе? Заранее спасибо!

...