我在React Native应用中使用以下设置:
connect
中的react-redux
来触发动作,假设类型为MY_ACTION
。动作创建者是一个位于GUI道具上的函数(connect
放在那里)。因此,GUI调用this.props.sendMyAction()
进行调度。MY_ACTION
并在每次调度MY_ACTION
时调用后台进程: function* myActionWatcher() {
yield takeEvery(MY_ACTION, function*() {
yield spawn(backgroundSaga);
});
}
这似乎有效。但是,仅当背景传奇完成后,JS线程才似乎返回GUI:
this.props.sendMyAction();
console.info('Sent action!'); // <---- only called after backgroundSaga finishes
[这似乎很奇怪,因为spawn
正是一种以异步方式分叉传奇的分叉机制,即,父传奇无需等到完成就可以。
我想念什么?
backgroundSaga做什么?如果从同步代码块开始,则该代码将必须完成执行(直到收益或返回),然后控制权才能返回到父级传奇,redux或您的组件。
调用yield spawn(backgroundSaga)
时,创建一个独立的传奇并开始运行该传奇。传奇故事将一直运行直到命中yield
语句。子英雄传奇分离的事实意味着,即使子英雄传奇没有完成,父传奇英雄也有可能完成,但是父英雄传奇仍需要等待孩子的故事yield
。只有一旦孩子的传奇故事屈服了,控制权才返回到父传奇故事,然后回到redux,再回到您的react组件。