【问题标题】:Redux-saga: what mechanism makes it possible for redux-saga middleware to wait and not block everything elseRedux-saga:什么机制使 redux-saga 中间件可以等待而不阻塞其他所有内容
【发布时间】:2018-12-21 06:55:23
【问题描述】:

Redux-saga 中间件给我们的感觉就好像它运行在一个单独的线程上。当它被告知等待某个动作被 saga(生成器函数)分派时,它会暂停 saga,直到分派感兴趣的动作。单个 js 运行时是单线程的,saga 中间件如何等待一个动作被调度,同时又不阻塞其他所有东西?

【问题讨论】:

    标签: redux redux-saga


    【解决方案1】:

    等待操作的工作方式如下:

    1. 对于任何take() 效果,redux-saga 中间件在 takers 数组中创建一个条目。一个条目包含模式和暂停的生成器。
    2. 在任何动作调度中,中间件都会根据 takers 数组检查动作。计划运行匹配的生成器。

    这是不涉及阻塞任何东西的异步等待。

    【讨论】:

    • 您是否可以提供链接来支持您的回答?
    • 是的,redux-saga 来源:runSaga.js 揭示了 take() 实际上是一个带有“标准通道”的镜头。频道逻辑在channel.jseffectRunnerMap.js 中还有一些有趣的东西。
    • 不像我解释的那么简单,但通常一切都通过回调进行。
    最近更新 更多