2017-10-17 20 views
0

サードパーティのライブラリ(ng2-img-tools)を使用してイメージのサイズ変更を行っています。 ライブラリ画像など非同期動作の完了角で

リサイズ、 作物、 resizeExactCropのサイズ変更を実行するために異なる機能を提供しています。

上記の関数は非同期操作です。

たとえば、

resizeImage(files:any, width:number, height:number){ 
    return this.ng2ImgToolsService.resize(files, width, height) 
    .map((result:any) => result) 
    .catch((error:any) => error); 
    } 

    //For Thumbnails 
    resizeExactCrop(files:any, width:number, height:number){ 
    return this.ng2ImgToolsService.resizeExactCrop(files, width, height) 
    .map((result:any) => result) 
    .catch((error:any) => error); 
    } 

私は上記の2つの関数を呼び出してイメージのサイズを変更しています。

resizeImages(){ 
    this.resizeImage([img1],400,400).subscribe(data => { 
     console.log("Resized Image is "+data); //1st finished 
    }, 
    error => console.log("Resizing Image Failed", error)); 

    this.resizeExactCrop([img1],100,100).subscribe(data => { 
     console.log("Cropped Image is "+data); //2nd finished 
    }, 
    error => console.log("Resizing Image Failed", error)); 
    } 

IはresizeImagesにおける2以上の操作が終了したら、操作を実行する必要があります。どうすれば2つの操作が完了したかを追跡できます。私はカウンタを使用して非同期操作の完了を追跡しています。完了を効率的に追跡する方法はありますか?

答えて

1

RxJS#forkJoin関数を使用することができます。すべての観測値が完了すると、最後の値が出力されます。あなたは書くことができます

Observable.forkJoin(
    this.resizeImage([img1],400,400), 
    this.resizeExactCrop([img1],100,100) 
).subscribe(values => ...) 

コードの例。すべての観測が完了したときにのみ観察可能では

const Observable = Rx.Observable; 
 

 
console.log('Start'); 
 

 
Observable.forkJoin(
 
    Observable.of(4), 
 
    Observable.of('Hello').delay(2000) 
 
).subscribe(values => console.log(values));
<script src='https://unpkg.com/@reactivex/[email protected]/dist/global/Rx.js'></script>

+0

(そのうちの一つは、2秒の遅延で動作します)作品を購読する私はforkJoinを試してみましたが、「値は」内部のサブスクライブと呼ばれる取得されていません。私は 'resizeImage'と 'resizeExactCrop'の中に何かを返す必要がありますか? – Anish

+0

あなたの関数は 'forkJoin'なしで動作しますか? –

+0

はい。私は別に電話して結果を得ることができました。 – Anish

関連する問題