データをフェッチして、別の関数が javaScript オブジェクトとして使用できるように準備したいと考えています。問題は、プログラムの完了後にデータがフェッチされることです。プロジェクトへのリンクは次のとおりです: https://github.com/bigbassroller/isomorphic-js/blob/master/src/components/pages/Home/HomeController.js。ここのコードを参照してください:
import "babel-polyfill";
import Controller from '../../../lib/controller';
import nunjucks from 'nunjucks';
import fetch from "isomorphic-fetch";
import promise from "es6-promise";
function onClick(e) {
console.log(e.currentTarget);
}
function getData(context) {
let data = {
"name": "Leanne Graham"
}
return data;
}
function fetchData(context) {
return fetch("http://jsonplaceholder.typicode.com/users/1").then(function(response) {
let data = response.json().body;
return data;
});
}
export default class HomeController extends Controller {
index(application, request, reply, callback) {
this.context.cookie.set('random', '_' + (Math.floor(Math.random() * 1000) + 1), { path: '/' });
this.context.data = { random: Math.floor(Math.random() * 1000) + 1 };
callback(null);
}
toString(callback) {
// Works
let context = getData(this.context);
// Doesn't work
// let context = fetchData(this.context);
context.data = this.context.data;
nunjucks.render('components/pages/Home/home.html', context, (err, html) => {
if (err) {
return callback(err, null);
}
callback(null, html);
});
}
attach(el) {
console.log(this.context.data.random);
this.clickHandler = el.addEventListener('click', onClick, false);
}
detach(el) {
el.removeEventListener('click', onClick, false);
}
}
ページがレンダリングされる前にデータを取得することは可能ですか? できるだけ多くのことを学ぼうとしているので、物事をできるだけ平凡に保つようにしています。私はこの問題を解決しようとして何日も立ち往生していたので、SOに助けを求め、同じ問題を抱えている他の人を助けるために来ています。私の問題は、 https://github.com/reactjs/redux/issues/99の問題に似ていますが、redux を使用しようとしているのではなく、代わりにプロミスを使用したいと考えています。