我正在尝试使用Observables在数组元素之间插入可变的时间延迟。在此示例中,我想在屏幕上水平移动兔子图标。就像在街机上玩水枪比赛。这是我的输入数组

    var inputArray = [
       {locationX: 100, timeDelay: 2000},
       {locationX: 500, timeDelay: 8000},
       {locationX: 700, timeDelay: 3000}
    ]


在此示例中,兔子将在2秒后移至100px的位置,然后在8秒延迟后移至500px的位置,依此类推。

    var obs = Rx.Observable.from(inputArray)
        .flatMap( x => return Rx.Observable.timer(x.timeDelay) )


上面的代码不起作用。我只是循环遍历数组而没有时间延迟。有任何想法吗?

最佳答案

这是一个有效的示例,您必须消除return语句,并将结果选择器[function]添加到flatMap,它将遍历每个元素并将其传递给您的订阅。这里有工作示例http://jsbin.com/jutizataji/edit?js,console,output



var inputArray = [
       {locationX: 100, timeDelay: 500},
       {locationX: 500, timeDelay: 1000},
       {locationX: 700, timeDelay: 5000}
    ]

Rx.Observable
  .from(inputArray)
  .flatMap(x => Rx.Observable.timer(x.timeDelay), (x) => x)

  // here x represent each object inside your input array, to access location do x.locationX
  .subscribe((x) => { console.log(x); });

10-04 22:18