Написание промежуточного программного обеспечения коа для 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(...)

Другие вопросы по тегам