2017-04-20 50 views
0

我正在嘗試創建角度爲2的YouTube播放器服務。 服務應提供兩個方法:Typescript - 調用序列中的異步方法

  • playRange - 播放視頻的給定範圍,並在年底跳轉到一個特定的時間在視頻中。範圍是一個數組[開始,結束,返回時間]。 爲了在指定時間停止視頻,我需要使用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); 
    } 
    } 

我應該如何落實腳本,所以我可以重複範圍的序列,並通過一個發揮他們嗎?

回答

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