我正在从redux-thunk转向redux-saga,但却发现了一个缺陷。
使用redux-thunk我有一种非常典型的做法"添加请求":
request
这个行动会回复一个我可以等待的承诺。 requestDownload
函数(上面的downloadId
)会批准请求,并使用SOME_URL
解析,否则如果System.out.println("s1 == s2 ?: " + s1.equals(s2))
的下载已存在,则会拒绝。
我怎样才能在redux-saga中这样做?似乎行动不能归还任何东西。
由于
答案 0 :(得分:1)
在redux-saga
中,您没有使用await
,而是将yield
与effects
结合使用。
您的代码可能如下所示:
// saga.js
import { call, put } from 'redux-saga/effects'
import { requestDownloadSucceeded, requestDownloadFailed } from './reducer.js'
function* downloadRequestedFlow() {
try {
const downloadId = yield call(requestDownload, 'SOME_URL')
yield put(requestDownloadSucceeded(downloadId))
} catch(error) {
yield put(requestDownloadFailed(error))
}
}
// reducer.js
...
export const requestDownloadSucceeded = downloadId => ({
type: REQUEST_DOWNLOAD_SUCCEEDED,
downloadId,
})
export const requestDownloadFailed = error => ({
type: REQUEST_DOWNLOAD_FAILED,
error,
})
请注意带有*
的生成器函数,该函数允许使用yield。我在这里也使用了常见的REQUESTED
,SUCCEEDED
,FAILED
模式。
我希望这个答案很有帮助。