2016-11-11 25 views
1

私はrequire jsを習得しようとしており、ここから見つかった複数ページのデモを拡張するために取り組んでいます:https://github.com/requirejs/example-multipageをフェッチしてください。fetch-in requireを使用する必要がありますjs

上記のgitリポジトリのデモコードから、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)

理想的には、これは新しいベースオブジェクトを返します。取得されたjsonを使用してデータソースにデータを取り込みます。 this.data = data、新しいBaseオブジェクトが作成されたとき。

現在のところ、私は約束を取り戻すだけで、ジャソンを取り戻すことはできないようです。私がconsole.logに約束すれば、私はそこで成功した応答を見ることができます。

答えて

0

私は問題がm1に割り当てられていると思います。戻り値fetchは使用できません。あなたのコードの実行順序は以下の通りです:を開始し、作成して返し、フェッチからデータを受け取ります。だから、あなたはまだBaseをビルドしているときにデータを持っていません。それはJSの一般的なパターン(とピットフォール)です。コールバックやPromiseで作業できますか?

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