Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么不调用可完成的任务?

为什么不调用可完成的任务?
EN

Stack Overflow用户
提问于 2018-06-26 06:39:35
回答 1查看 522关注 0票数 1

所以刚到RX的家伙们我有个问题。

在我学习野兽的探险中,也就是RXJava,这是我的课程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class PollingLoop {

public static <T> Observable<T> buildObservable(
    final int interval,
    final TimeUnit timeUnit,
    final int maxJitter,
    final Scheduler scheduler,
    final Supplier<Observable<T>> scheduledTask) {

    if (maxJitter <= 0) throw new IllegalArgumentException("Jitter must be greater than 0");

    final Random randomJitter = new Random();
    return Observable.timer(interval, timeUnit, scheduler)
        .map(x -> {
            System.out.println("Flat map jitter");
            return randomJitter.nextInt(maxJitter);
        })
        .flatMap(jitter -> {
            System.out.println("Flat map timer");
            return Observable.timer(jitter, timeUnit, scheduler);
        })
        .flatMap(ignored -> {
            System.out.println("Flat map task");
            return scheduledTask.get();
        })
        .retry()
        .repeat();
}

public static <T> Completable buildCompletable(
    final int interval,
    final TimeUnit timeUnit,
    final int maxJitter,
    final Scheduler scheduler,
    final Supplier<Completable> scheduledTask) {

    if (maxJitter <= 0) throw new IllegalArgumentException("Jitter must be greater than 0");

    final Random randomJitter = new Random();
    return Observable.timer(interval, timeUnit, scheduler)
        .map(x -> {
            System.out.println("Flat map jitter");
            return randomJitter.nextInt(maxJitter);
        })
        .flatMapCompletable(jitter -> {
            System.out.println("Flat map timer");
            return Completable.timer(jitter, timeUnit, scheduler);
        })
        .flatMapCompletable(ignored -> {
            System.out.println("Flat map task that is not called");
            return scheduledTask.get();
        })
        .retry()
        .repeat()
        .toCompletable();
}
}

从测试中,当我测试可观察到的执行延迟时,我得到了输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flat map jitter
Flat map timer
Flat map task //(observable is being called)

但是当我测试可完全执行的延迟时,我得到了输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Flat map jitter
Flat map timer

//(未调用可完成的任务)

我做错什么了?为什么不能从buildCompletable内部调用可完成的任务?

这是测试(用斯波克写的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def 'should delay execution of observable'() {
    given:
    def subscriber = new TestSubscriber<>()
    def scheduler = new TestScheduler()
    def supplier = Mock Supplier

    supplier.get() >> Observable.just(true)

    when:
    PollingLoop.buildObservable(100, TimeUnit.MILLISECONDS, 1, scheduler, supplier).subscribe(subscriber)
    scheduler.advanceTimeBy(101, TimeUnit.MILLISECONDS)

    then:
    subscriber.assertValueCount(1)
    subscriber.assertValue(true)
}

    def 'should delay execution of completable'(){
    given:
    def subscriber = new TestSubscriber<>()
    def scheduler = new TestScheduler()
    def supplier = Mock Supplier
    supplier.get() >> Completable.complete()

    when:
    PollingLoop.buildCompletable(100, TimeUnit.MILLISECONDS, 1, scheduler, supplier).subscribe(subscriber)

    scheduler.advanceTimeBy(1001, TimeUnit.MILLISECONDS)
enter code here
    then:
    1 * supplier.get()
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 06:08:22

您的第一个flatMapCompletable()的结果是可完成的,因为这就是您要返回的内容。但是,可完成性将永远不会发出一个值(根据定义),因此后续的flatMapCompletable()没有映射的值。

由于第一个Completable不发出值,因此需要使用andThen()运算符或类似的方法绑定下一步。

您的代码编译是因为flatMapCompletable()运算符具有Observable<Long>签名。您需要将andThen()操作符放入flatMapCompletable()函数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51045579

复制
相关文章
mysql: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for opera
昨天把mysql里所有table的varchar字段的字符集,批量换成了utf8mb4/utf8mb4_unicode_ci ,以便能保存一些emoji火星文 , 结果有一个sql语句执行时,报错如下: Illegalmixofcollations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)foroperation '= 观察了一下,这个sql使用了一个自定义的function,这个函数的入口参数为varchar,类似如下: CREAT
菩提树下的杨过
2018/01/18
1.2K0
Mysql Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operat
resolve:将比较等式的一边进行字符串转换,如:“CONVERT(a.field_a USING utf8) COLLATE utf8_unicode_ci”
WindWant
2020/09/11
1.2K0
scala implicit class
scala 是一门 scalable 的语言,扩展性很强。 implicit 是 scala 的一个关键词,当它被用于 class 时,该类将被认为是implicit class,它可以用来扩展现有类的行为和方法
全栈程序员站长
2022/11/17
2610
修改MySQL varchar类型字段的排序规则
记录一个在工作中遇到的问题,也不算是问题,为的是找一种简便的方法批量修改数据表字段的排序规则,在MySQL中叫collation,常常和编码CHARACTER一起出现的。collation有三种级别,分辨是数据库级别,数据表级别和字段级别。
用户3579639
2018/10/22
4.7K0
TIMESTAMP with implicit DEFAULT value is deprecated
 这个是在windows server2008下安装时遇到的错误,是在运行mysqld –initialize 这一语句时发生的warnning,这是一个配置错误。  解决办法  在mysql/my.ini 文件中的[mysqld]下添加一行explicit_defaults_for_timestamp=true。就可以了   这个语句的含义是 #开启查询缓存,这也是web缓存之一,对重复查询只需要在缓存中读取就可以,减少对数据库的访问。 
拓荒者
2019/03/11
1.4K0
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
在免安装版mysql安装过程中出现:e:\java_software\mysql-5.6.21-winx64\mysql-5.6.21-winx64\bin>mysqld mysql  2017-04-01 10:44:04 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).  解决办法:需要在my.ini 下添加
拓荒者
2019/03/11
4.2K0
scala(4):implicit关键字
掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit 可分为:
yiduwangkai
2019/09/17
3920
OAuth 2.0 之 Authorization code 与 Implicit
OAuth 2.0 是用于授权的行业标准协议。我们常见的比如第三方登录、授权第三方应用获取保存在其它服务商的个人数据,这种都是 OAuth 2.0 的应用场景。
凌虚
2021/02/04
9170
spring security oauth2 implicit模式
前面三篇文章讲了client credentials、password以及authorization code授权模式,本文就来讲一下implicit模式。
code4it
2018/09/17
1.6K0
spring security oauth2 implicit模式
solidity智能合约implicit conversion异常
在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题。
程序新视界
2019/08/01
6410
C#中的explicit和implicit了解一下吧
今天在研究公司项目框架的时候看到了下面的用法,public static implicit operator JsonData(int data);。貌似很久没用过这种隐式转换的写法了,因此重新温习一下C#中转换相关的知识。
依乐祝
2019/05/22
1.2K0
在onelogin中使用OpenId Connect Implicit Flow
onelogin支持多种OpenId Connect的连接模式,上一篇文章我们讲到了使用openId的Authentication Flow,今天我们将会讲解一下如何使用Implicit Flow。
程序那些事
2021/02/02
9480
linux系统下,警告:warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration] 和 war
gets()函数的基本用法为: char *gets(char *s); 该函数的参数是一个字符数组,该函数的返回值也是一个字符数组。
黑泽君
2018/10/11
3.1K0
Implicit Language Model in LSTM for OCR 学习笔记
在本文中,我们试图改进对LSTMs的科学理解,特别是语言模型和LSTM中存在的字形模型之间的相互作用。 我们称这种内部语言模型为隐式语言模型(隐式LM)。 本文的贡献:1)在受控条件下建立隐式LM的存在; 2)通过找出它使用的上下文有多少个字符来描述隐式LM的本质。 我们所描述的隐式LM与上面讨论的文献19、20中的语言模型有所不同,因为学习语言模型的背景和要求不同:OCR明确要求学习字形模型而不是语言模型。最近的关于使用LSTM进行OCR的基准文件22并没有涉及这一点,而且据我们所知,文献中也没有涉及。
Natalia_ljq
2020/06/03
9370
Implicit Language Model in LSTM for OCR  学习笔记
scala 隐式详解(implicit关键字)
掌握implicit的用法是阅读Spark源码的基础,也是学习Scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把最后一个参数列表标记为implicit,表示该组参数是隐式参数。一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表。如果方法有多个隐式参数,只需一个implicit修饰即可。 当调用包含隐式参数的方法是,如果当前上下文中有合适的隐式值,则编译器会自动为改组参数填充合适的值。如果没有编译器会抛出异
Albert陈凯
2018/04/04
1.4K0
warning: #1300-D: XXX inherits implicit virtual 报警
编译的时候出现了大量warning: #1300-D: XX_function inherits implicit virtual 的警告信息。
全栈程序员站长
2022/11/16
2760
(3.6)James Stewart Calculus 5th Edition:Implicit Differentiation
例如: x^2 + y^2 = 25 这个时候,我们知道 如果是函数, 用竖线检测, 需要把图像拆分
dodo_lihao
2018/09/12
6280
(3.6)James Stewart Calculus 5th Edition:Implicit Differentiation
Implicit super constructor BaseService() is undefined. Must explicitly invoke another constructor
今天遇到了这个问题,也在网上查了不少资料,为什么还要写这篇文章呢,看完之后您也许就了解我的意图了
johnhuster的分享
2022/03/28
3450
点击加载更多

相似问题

对于操作'=‘,MySQL排序规则(utf8_unicode_ci,IMPLICIT)和(utf8_general_ci,IMPLICIT)的非法混合

40

MySQL存储过程中操作'=‘的排序规则(utf8_general_ci,IMPLICIT)和(utf8_unicode_ci,IMPLICIT)的混合是非法的

265

mysql:错误代码[1267];操作'=‘的排序规则(latin1_general_cs,IMPLICIT)和(latin1_swedish_ci,IMPLICIT)的混合非法

30

非法混合排序规则(utf8_unicode_ci,矫顽力)和(utf8_general_ci,矫顽力)用于操作'=‘

30

MySQL错误代码: 1267。操作'locate‘的排序规则(utf8mb4_general_ci,IMPLICIT)和(utf8mb4_0900_ai_ci,IMPLICIT)的混合非法

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文