Поместите асинхронные вызовы в хранилище redux с помощью redux-saga

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

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

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

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

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

. . .

// 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) => {
 . . .
}

person podeig    schedule 27.09.2019    source источник


Ответы (1)


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
person Nicholas Tower    schedule 27.09.2019