我想獲取數據並準備好將其作爲另一個函數用作javaScript對象。問題是數據在程序完成後被提取。這裏是該項目的鏈接:https://github.com/bigbassroller/isomorphic-js/blob/master/src/components/pages/Home/HomeController.js。在此處查看代碼:與JavaScript同步獲取數據異步數據
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);
}
}
是否有可能在頁面呈現之前獲取數據?我試圖儘可能保持香草,因爲我正在儘可能地學習。我一直試圖解決這個問題,因此我一直在尋求幫助,並幫助其他有相同問題的人。 我的問題類似於這個問題,https://github.com/reactjs/redux/issues/99,但我沒有嘗試使用redux,而寧可使用promises。
在進行異步調用時,請不要考慮同步函數調用和執行。相反,開始考慮回調和事件。歡迎來到異步世界。 –
您能否提供一些關於代碼執行方式的更多上下文。你提到「程序」,但這有點含糊。它是Node中的程序嗎?它只是在HTML頁面中運行JavaScript嗎?你正在寫一個函數嗎?你在使用其他框架嗎? –
抱歉是含糊不清。這裏是我嘗試使用該功能的真實生活項目的鏈接:https://github.com/bigbassroller/isomorphic-js/blob/master/src/components/pages/Home/HomeController.js getData需要返回tostring(回調)函數內的控制器要使用的對象。 謝謝大家的幫助。我意識到我處於我的頭上,但這是我目前感興趣的事情,我真的想解決並理解這個問題。 – mchavezi