Написание промежуточного программного обеспечения коа для fluxible-маршрутизатора (async executeAction)
Я пытаюсь использовать коа с Fluxible-маршрутизатор. Большинство экспресс-примеров используют похожий шаблон, но затем используют send () непосредственно в navigateAction.
React.renderToString() получает правильный реквизит, только что вызванный в контексте executeAction.
'use strict';
var React = require('react');
var app = require('./app');
var navigateAction = require('fluxible-router').navigateAction;
function render() {
return function *render(next) {
var context = app.createContext(
{
req: this.request
, xhrContext: {
_csrf: 'pino'
}
}
);
var html = null;
context.executeAction(navigateAction, {
method: this.request.method
, url: this.request.url
}, function (err) { // this function is executed asyncronously
console.log('1');
var html = React.renderToString(context.createElement());
});
this.body = html;
console.log('2');
yield* next;
}
}
module.exports = render;
Единственный способ, которым я нашел заполнение реквизита, - это запустить renderToString() внутри executeAction (), но он выполняется асинхронно, так что console.log ('2') выполняется перед console.log ('1') и возвращенное тело является нулевым.
Я не знаю ни способа ожидания renderToString, ни способа запуска renderToString() в нужном контексте.
Спасибо
1 ответ
Это способ сделать это
https://gist.github.com/cesarandreu/03f6c584a40c62812deb
или просто выведите context.executeAction(...)