我正在尝试使用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); });