2017-04-20 17 views
0

角度2のYouTubeプレーヤーサービスを作成しようとしています。 サービスは、次の2つのメソッドを提供する必要がありますTypescript - シーケンス内で非同期メソッドを呼び出す

  • playRangeを - ビデオの指定した範囲を再生し、ビデオの特定の時間に最後のジャンプで。範囲は配列[start、end、returnTime]です。 指定された時刻にビデオを停止するには、ビデオの現在の位置を確認するためにsetIntervalを使う必要があります。これはメソッドを非同期にします。
  • playScript - 範囲の配列であるスクリプトを再生します。したがって、基本的にシーケンス内の範囲はほとんど再生されません。

playRange実装:

playRange(range: any) { 
    if (this.player) { 
     console.log('Playing range:' + range) 
     const start: number = +range[0]; 
     const end: number = +range[1]; 
     const returnTime: number = range.lenth === 3 ? range[0] : range[2]; 
     this.player.seekTo(start, true); 
     clearInterval(this._rangeTimer); 
     if (this.player.getPlayerState() !== YT.PlayerState.PLAYING) { 
     this.player.playVideo(); 
     } 
     this._rangeTimer = setInterval(() => { 
     const currentTime = this.player.getCurrentTime(); 
     if (currentTime >= end) { 
      this.pause(); 
      clearInterval(this._rangeTimer); 
      this.player.seekTo(returnTime, true); 
     }  
     }, 200); 
    } 
    } 

どのように私はplayScriptを実装する必要がありますので、私は範囲のシーケンスを反復処理し、それらを一つ一つを再生することができますか?

答えて

2

あなたは内部ロジックがどのように機能するのかは分かりませんが、これはあなたに良いレベルを与えるはずです。それを確認してくださいhere

type RangeArray = [number, number] | [number, number, number]; 

function playRange(range: RangeArray): Promise<void> { 
    return new Promise<void>((resolve, reject) => { 
     // Do whatever you need to to play the range. 
     // Whenever you have determined that the range has finished, call resolve 
     resolve(); 
    }); 
} 

async function playScript(ranges: RangeArray[]):Promise<void> { 
    while (ranges.length > 0) { 
     await playRange(ranges.pop()); 
    } 
} 
関連する問題