为什么`React.renderToNodeStream`不屈服于事件循环?

里斯卡罗特

我试图让阵营的renderToStringrenderToStaticMarkup更好的公民通过产生事件循环允许其他服务器的请求,以获得一看,如

const React = require('react');
const { renderToNodeStream } = require('react-dom/server');

// Wrap `renderToNodeStream` in promise
const renderToStringAsync = node => {
  return new Promise((resolve, reject) => {
    let body = '';
    const stream = renderToNodeStream(node);
    // NOTE: we're turning the tap on full blast here, but I still expected it to yield
    stream.on('data', chunk => {
      console.log('Received chunk');
      body += chunk.toString();
    });
    stream.on('error', ex => {
      reject(ex);
    });
    stream.on('end', () => {
      resolve(body);
    });
  });
};

setTimeout(() => {
  console.log('Yielded to event loop');
}, 0)
await renderToStringAsync(largeRootNode);

我期望这样:

// Expect:
// Received chunk
// Yielded to event loop
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk

但是我实际上得到了这个:

// Actual:
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Received chunk
// Yielded to event loop

我想知道它是否与.on('data')我知道它不能解决背压问题,但我一直以为它会异步?

注意:我没有将响应传递给客户端,因为我需要等待渲染完成才能确定状态码。我只想用来renderToNodeStream改善node.js中的协作式多任务处理)

Promise执行器是同步执行的,ReactDOMNodeStreamRenderer也是如此_readReactDOMNodeStreamRender的方法没有异步组件和将被称为同步按照在节点中的方法的合同

简而言之,这里的整个代码块都是同步执行的,不涉及同步。流接口不仅可以异步执行该流,而且还可以更轻松地通过管道传输到确实异步写入的流。

重要的是要注意,流接口本身不会使任何操作异步!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

主线程永不屈服于goroutine

来自分类Dev

不屈服的协程和正常的同步函数之间有什么区别吗?

来自分类Dev

为什么未在dispatchEvent上调用React事件处理程序?

来自分类Dev

为什么react.js事件委托很快?

来自分类Dev

为什么React不会为表单列出onReset事件?

来自分类Dev

React.js:为什么没有componentDidRender事件?

来自分类Dev

为什么mouseDown事件不会在React中传播?

来自分类Dev

为什么React在事件处理程序中找不到“ this”

来自分类Dev

为什么 React Big Calendar 不显示事件?

来自分类Dev

为什么我用此React代码遇到无限循环?

来自分类Dev

为什么setState导致我的React应用进入无限循环?

来自分类Dev

什么是React中的事件循环?

来自分类Dev

什么是React中的事件循环?

来自分类Dev

对于...在不屈服的方法中

来自分类Dev

为什么无限循环?

来自分类Dev

无限循环。为什么?

来自分类Dev

为什么while循环会阻止事件循环?

来自分类Dev

用草率的方式写一个蜘蛛,但是为什么“屈服项”在嵌套的for循环中不起作用?

来自分类Dev

为什么React不允许您将事件绑定到函数?

来自分类Dev

与常规DOM中的输入不同,React触发虚拟DOM输入的onChange事件。为什么是这样?

来自分类Dev

为什么react onClick事件会在我的网址后附加一个问号?

来自分类Dev

为什么在表单输入更改事件中反复调用ReactClass中的react函数

来自分类Dev

为什么在更改同级节点的“显示”属性时,React组件的onClick事件处理程序不触发?

来自分类Dev

为什么本机DOM事件总是会重置React组件状态

来自分类Dev

为什么我在React的定位标记上的onClick事件中无法定义?

来自分类Dev

为什么更新状态未反映在事件侦听器中:React Native,Hooks

来自分类Dev

为什么本机DOM事件总是会重置React组件状态

来自分类Dev

为什么在表单输入更改事件中反复调用ReactClass中的react函数

来自分类Dev

为什么 onPress 在 react-native-maps 的标记文档中列为事件?

Related 相关文章

  1. 1

    主线程永不屈服于goroutine

  2. 2

    不屈服的协程和正常的同步函数之间有什么区别吗?

  3. 3

    为什么未在dispatchEvent上调用React事件处理程序?

  4. 4

    为什么react.js事件委托很快?

  5. 5

    为什么React不会为表单列出onReset事件?

  6. 6

    React.js:为什么没有componentDidRender事件?

  7. 7

    为什么mouseDown事件不会在React中传播?

  8. 8

    为什么React在事件处理程序中找不到“ this”

  9. 9

    为什么 React Big Calendar 不显示事件?

  10. 10

    为什么我用此React代码遇到无限循环?

  11. 11

    为什么setState导致我的React应用进入无限循环?

  12. 12

    什么是React中的事件循环?

  13. 13

    什么是React中的事件循环?

  14. 14

    对于...在不屈服的方法中

  15. 15

    为什么无限循环?

  16. 16

    无限循环。为什么?

  17. 17

    为什么while循环会阻止事件循环?

  18. 18

    用草率的方式写一个蜘蛛,但是为什么“屈服项”在嵌套的for循环中不起作用?

  19. 19

    为什么React不允许您将事件绑定到函数?

  20. 20

    与常规DOM中的输入不同,React触发虚拟DOM输入的onChange事件。为什么是这样?

  21. 21

    为什么react onClick事件会在我的网址后附加一个问号?

  22. 22

    为什么在表单输入更改事件中反复调用ReactClass中的react函数

  23. 23

    为什么在更改同级节点的“显示”属性时,React组件的onClick事件处理程序不触发?

  24. 24

    为什么本机DOM事件总是会重置React组件状态

  25. 25

    为什么我在React的定位标记上的onClick事件中无法定义?

  26. 26

    为什么更新状态未反映在事件侦听器中:React Native,Hooks

  27. 27

    为什么本机DOM事件总是会重置React组件状态

  28. 28

    为什么在表单输入更改事件中反复调用ReactClass中的react函数

  29. 29

    为什么 onPress 在 react-native-maps 的标记文档中列为事件?

热门标签

归档