2016-11-11 94 views
1

我试图学习需要js,并且正致力于扩展从此处发现的多页面演示:https://github.com/requirejs/example-multipage with fetch。使用提取带内需要js

从上面的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装载的垫片,这就是为什么它被包含在定义参数 - 但dev的在其上有获取支持最新的Chrome)

理想地,这将返回一个新的基本对象它使用已获取的已解析json填充其数据源。 this.data = data,当新的Base对象被创建时。

目前,虽然看来我只得到承诺,并且无法获得json。虽然如果我console.log承诺,我可以看到在那里成功的回应。

回答

0

我认为问题是你如何分配到m1。您不能使用fetch的返回值。您的代码的执行顺序如下:开始提取,创建并返回Base,从提取中接收数据。因此,当您构建Base时,您还没有数据。这是JS中常见的模式(和pittfall)。你可以用回调或Promise工作吗?

define(['./Base','fetch'], function (Base, callback) { 
    fetch('data/people.json') 
    .then(function(response) { 
     callback(response.json()); 
     // or maybe you want 
     //Base(response.json()); 
    }); 
});