假设我有一个功能
function* request(url) {
return global.fetch(url).then(response =>
_.result(response, 'json'))
}
两个代码示例对我来说都很好
const {data} = yield call(request, 'http://example.com/api');
yield put(actionSuccess(data));
和
const {data} = yield request('http://example.com/api');
yield put(actionSuccess(data));
因此有问题。对返回承诺的函数使用call
效果有什么好处?
答案 0 :(得分:3)
使用call()
的一些好处:
call()
和其他效果。yield
语句时才产生控制权(回到redux-saga中间件)。这些是可能发生取消的唯一点。 yield call()
使redux-saga有机会在即将不再需要的呼叫之前取消任务。使用gen.return()
生成器方法执行任务取消。 [1] [2] yield
时,这是redux-saga中间件执行任何类型的调度其他任务的唯一机会。 (不过,我不确定redux-saga的表现如何。)有关更多信息,我认为最好在redux-saga的Github上打开一个问题,直接询问维护者。
答案 1 :(得分:1)
优点是可以查看应用程序中发生的事情。
您想知道何时,为什么以及如何更新状态 [1] 。
当在传奇中间件[2]和before running the effect上配置了传奇监视器时, call
after the effect is resolved 会触发效果。
在配置了传奇监视器且未使用call
效果的情况下,我在监视器日志中看到了这一点。
但是具有call
效果,