我是ReactX JS的初学者。以下是与站点http://reactivex.io/documentation/operators/timeout.html中给出的超时相关的示例代码。我不明白网站上的解释。有人能用简单的言语和逻辑解释吗?
主要问题是:
outputs
是0, 1, 2
而不是200, 300, 350
?0, 1, 2
分别对应于200, 300 ,350
吗?Rx.Observale
是什么意思? Rx
来自哪里?map
运算符返回i
,i
是否等于0, 1, 2
?Rx.Observale.for().map().timeoutWithSelector()
想要什么
要做?示例代码
var array = [
200,
300,
350,
400
];
var source = Rx.Observable
.for(array, function (x) {
return Rx.Observable.timer(x);
})
.map(function (x, i) { return i; })
.timeoutWithSelector(function (x) {
return Rx.Observable.timer(400);
});
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); });
输出:
Next: 0
Next: 1
Next: 2
Error: Error: Timeout
答案 0 :(得分:1)
Rx是一个图书馆。 Observable的用法类似于Promise,因为它们都用于异步任务/请求。
解释代码:
源变量是一个Observable。源Observable在var订阅行上进行了订阅,由于它是lazy,因此在被订阅之前,不会触发/调用Observable。订阅将三个函数作为参数,第一个成功,第二个错误,最后一个完成。
一旦订阅了源,就从for循环遍历给定数组。给定的函数与数组中的每个元素一起调用。因此,在这种情况下,对于数组中的每个元素,都会返回一个Observable,并且计时器意味着在给定的时间(现在为+ x)下,Observable将发送一个从0开始并每次递增的数字。因此,对于第一个元素200,Observable将等待200,然后返回0。对于下一个元素300,Observable将等待300,然后返回1。这将对整个数组继续进行。
map函数,返回的值是x,i是一个增量器。因此,它将首先是0、0,然后是1、1,然后继续进行数组操作。
timeoutWithSelector表示,如果Observable在给定函数之前未完成,则将引发错误。
因此它输出0、1、2,错误,因为只有数组中的前3个元素在400之前完成。0在200之前完成,1在100以后完成(300-200),然后2在50之后完成(350-100) -200)。在400处引发错误,并且Observable停止。因此,它永远不会完成,因此,不会打印“已完成”。
希望这会有所帮助。