RxJS在每个订阅之间运行操作

时间:2018-03-30 22:32:59

标签: javascript typescript rxjs angular-pipe

我已经实现了一个角度管道,可以说出通过的文字。

我基本上是用几句话做文字对话。用户需要能够在播放音频时看到句子...音频播放完毕后没有(我现在就是这样)。

给定一个Observable字符串,如何立即订阅每个字符串,然后播放音频直到完成,然后继续其余的字符串?

transform(input: Observable<string>, ...args) {
  if (input) {
    return input.concatMap(text => {

      if (!text)
        return Observable.empty()

      let promise = Promise.resolve()
      .then(() =>
        this.service.textToSpeech(text)
      )
      .then((audio) =>
        new Promise<string>((resolve) => {
          player.play(audio)
          player.addEventListener("ended", () => {
            resolve(text)  // The user sees the text when the audio stops..
          })
        })
      )

      return Observable.fromPromise(promise)

    })
  }
}

1 个答案:

答案 0 :(得分:0)

我通过使用这样的偏移量解压缩我的问题(其中f(a)是文本a的音频):

a, null
b, f(a)
c, f(b)
null, f(c)

代码不是很漂亮,但它有效...... 从好的方面来说,现在文字转语音API请求不会被音频播放阻止。