我试图让阵营的renderToString
和renderToStaticMarkup
更好的公民通过产生事件循环允许其他服务器的请求,以获得一看,如
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也是如此。该_read
ReactDOMNodeStreamRender的方法没有异步组件和将被称为同步按照在节点中的方法的合同。
简而言之,这里的整个代码块都是同步执行的,不涉及同步。流接口不仅可以异步执行该流,而且还可以更轻松地通过管道传输到确实异步写入的流。
重要的是要注意,流接口本身不会使任何操作异步!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句