使用 redux-saga 对 redux store 进行异步调用

Posted

技术标签:

【中文标题】使用 redux-saga 对 redux store 进行异步调用【英文标题】:Put asynchronously calls to redux store by using redux-saga 【发布时间】:2020-01-27 14:39:10 【问题描述】:

我有一个“提供者”列表,我必须从其中异步获取数据。我使用 redux-saga。

函数 requestProvider 返回 Promise 并为每个提供者获取数据。

我使用“yield all”来运行多个异步请求。

我需要将结果从每个提供者推送到 redux 商店。我尝试使用“yield all”来注册“put”。但是这条线被忽略了。我不确定我做得对。

如何调用redux action将数据发送到redux store?

. . .

// 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】:

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

【讨论】:

以上是关于使用 redux-saga 对 redux store 进行异步调用的主要内容,如果未能解决你的问题,请参考以下文章

redux-saga - sagaMiddleware.run对Generator Function的封装

多个 redux-sagas

为啥使用 Redux-Observable 而不是 Redux-Saga?

redux-saga

为啥使用 redux-thunk 或 redux-saga 进行 fetches?

手写Redux-Saga源码