Делать асинхронные вызовы в Redx Store с помощью redux-сага - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть список с «провайдерами», из которых я должен получать данные асинхронно.Я использую redux-saga.

Функция requestProvider возвращает обещания и извлекает данные для каждого провайдера.

Я использую «yield all» для запуска нескольких асинхронных запросов.

Чем мне нужноподтолкнуть результаты от каждого провайдера в магазин избыточных данных.Я пытаюсь использовать "yield all", чтобы зарегистрировать "put" s.Но эта строка игнорируется.Я не уверен, что я все делаю правильно.

Как вызвать избыточное действие для отправки данных в хранилище избыточных данных?

. . .

// Providers api
const providers = [ '/apiProvider1', '/apiProvider2', '/apiProvider3' ];

// Fetching data from each provider
const providerResults: [] = 
    yield all(providers.map(provider => call(requestProvider, provider)));

// Trying to push the results to redux-stor, but this line is ignored, nothing happened here
yield all ([
    providerResults.map(
        result => put({ type: constants.MAP_PUSH_PROVIDER_RESULTS, providerResults: result }))
])

. . .

export const requestProvider = (provider: Provider, coverageLocation: CoverageLocation): Promise<boolean> => {
// console.log('promise:::', provider);
return new Promise((resolve, reject) => {
 . . .
}

1 Ответ

0 голосов
/ 27 сентября 2019

providerResults.map возвращает массив, а затем вы помещаете его в дополнительный массив.Я думаю, вам просто нужно удалить этот дополнительный массив.

yield all ( // <-- removed square bracket on this line
  providerResults.map
    result => put({ type: constants.MAP_PUSH_PROVIDER_RESULTS, providerResults: result }))
) // <-- and on this line
...