Redux Saga似乎会阻止执行,即使Saga是从`spawn`开始的。

问题描述 投票:0回答:1

我在React Native应用中使用以下设置:

  1. GUI使用connect中的react-redux来触发动作,假设类型为MY_ACTION。动作创建者是一个位于GUI道具上的函数(connect放在那里)。因此,GUI调用this.props.sendMyAction()进行调度。
  2. 在我的根传奇中,我有以下调度程序,该调度程序侦听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正是一种以异步方式分叉传奇的分叉机制,即,父传奇无需等到完成就可以。

我想念什么?

react-native redux-saga
1个回答
0
投票

backgroundSaga做什么?如果从同步代码块开始,则该代码将必须完成执行(直到收益或返回),然后控制权才能返回到父级传奇,redux或您的组件。

调用yield spawn(backgroundSaga)时,创建一个独立的传奇并开始运行该传奇。传奇故事将一直运行直到命中yield语句。子英雄传奇分离的事实意味着,即使子英雄传奇没有完成,父传奇英雄也有可能完成,但是父英雄传奇仍需要等待孩子的故事yield。只有一旦孩子的传奇故事屈服了,控制权才返回到父传奇故事,然后回到redux,再回到您的react组件。

© www.soinside.com 2019 - 2024. All rights reserved.