2016-11-11 95 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()); 
    }); 
});