我正在尝试学习需要js,并正在努力扩展从这里找到的多页面演示:https://github.com/requirejs/example-multipage和fetch。
从上面的git repo中的演示代码中,我修改了www / js / app / model / m1.js代码,看起来像这样。演示中的其他所有内容基本相同。
define(['./Base','fetch'], function (Base) {
var m1 = fetch('data/people.json')
.then(function(response) {
return response.json();
});
return new Base(m1);
});
(我将polyfil加载作为垫片,这就是为什么它包含在define参数中 - 但是最新的chrome支持fetch)
理想情况下,这将返回一个新的Base对象,该对象使用fetch中已解析的json来填充其数据源。 this.data = data,创建新的Base对象时。
目前,我似乎只收到了承诺,并且无法取出json。虽然如果我在console.log中承诺我可以在那里看到成功的响应。
答案 0 :(得分:0)
我认为问题是你如何分配给m1
。您无法使用fetch
的返回值。代码的执行顺序如下:开始获取,创建并返回Base
,从fetch接收数据。因此,当您构建Base
时,您还没有数据。这是JS中常见的模式(和pittfall)。你可以使用回调或承诺吗?
define(['./Base','fetch'], function (Base, callback) {
fetch('data/people.json')
.then(function(response) {
callback(response.json());
// or maybe you want
//Base(response.json());
});
});