2017-04-23 20 views
-2

を解決されるプロパティを持つオブジェクトを構築:私は次の性質を持っているBrushPresetオブジェクトの配列を構築する必要がRxJS - 私は以下の内容をJSONファイル持って非同期

"brushPresets": 
[ 
{ 
    "name": "fur", 
    "imageUrl": "brush.png", 
    "func": "spray", 
    "scale": "1" 
}, 
{ 
    "name": "tinsel", 
    "imageUrl": "brush.png", 
    "func": "fur", 
    "scale": "1" 
}, ....] 

name:string, 
image:HTMLImageElement, 
func:Function, 
scale:number 

をしたがって、最初にjsonファイルをロードしてから、各ブラシに対してイメージを非同期にロードし、それをBrushPresetオブジェクトのimageプロパティに割り当てます。

loadImage(url:string)メソッドはすでに実装されており、Observable < HtmlImageElement>が返されます。

どのように私は、このJSONファイルをロードする方法を実装し、

Observable< BrushPreset[]> 
+0

ガイドラインhttps://stackoverflow.com/help/how-to-askをご確認ください。現在のところ表現されているように、あなたの質問は広すぎるため、問題の解決に向けた研究や試みの兆候は見られません。 https://stackoverflow.com/help/mcve – user3743222

+0

すみませんがあります。私の試みが成功しなかった場合、私はこの問題を解決しようとしていたことをどのように示していたでしょうか?私は、mergeMap、concatMap、forkJoinを見ていました。しかし、問題を解決するための演算子の適切な組み合わせを見つけることはできませんでした。そして、自分自身だけを混乱させる。このように、私は問題を、できるだけうまくいかないようにしようと試みることなく、できるだけ明瞭に述べようとしました。 –

+0

あなたの試行の1つが成功した場合、あなたは問題を起こさないでしょう。大多数の人が質問を投稿しているようなケースです。しかし、あなたが行った研究(ガイドラインを参照)、遭遇した問題、解決しなかった問題を示すことが推奨されています。多くの場合、試したが動作しなかったコードの一部が表示されます。第二に、あなたの質問が表現されているので、それは広すぎます:jsonファイルを読み込んでイメージを読み込みます。これらのそれぞれは、自分で質問することができます(どのようにファイルを読み込みますか?)。 – user3743222

答えて

0

を返すだろうまあ、私はこの問題を解決するために管理しました。 答えは次のようにforkJoinでconcatMap組み合わせることでした:それはプロジェクト内にあるよう

は、ここでは、コードです:

this.presets$ = 
     this.http.get('./assets/brushes/brushes.json') 
      .map((res:Response) => res.json()["brushPresets"]) 
      .concatMap(objAr => 
       Observable.forkJoin(objAr.map(obj => 
        this.loadImage(obj["image"]) 
         .map(image => { 
         return new BrushPreset(obj["name"], image, BRUSH_FUNCTIONS[item["func"]], obj["scale"]); 
         }) 
       ) 
      ) 
     ); 

編集:

ここでの代替ソリューションです。

this.presets$ = 
     this.http.get('./assets/brushes/brushes.json') 
      .map((res:Response) => res.json()["brushPresets"]) 
      .mergeMap(this.loadImage, (item, image) => { 
      return new BrushPreset(
       item["name"], 
       image, 
       BRUSH_FUNCTIONS[item["func"]], 
       item["scale"]); 
      }) 
      .toArray() 
関連する問題