📜  RxJava 延迟运算符

📅  最后修改于: 2022-05-13 01:55:00.589000             🧑  作者: Mango

RxJava 延迟运算符

在本文中,我们将了解 RxJava Defer Operator。根据我们的用例,我们将知道何时使用 Defer运算符。在使用 RxJava Defer Operator 时,我们经常犯错误。让我们直截了当,以免出错。

根据文档:

所以,在这种情况下,我们将通过一个例子来了解 RxJava 的 Defer Operator。假设我们有一个GfG 类,如下所示:

Kotlin
class GfG {
    var course: String = "DSA"
  
    fun getCourseObservable(): Observable {
        return Observable.just(course)
    }
  
    fun getCourseDeferObservable(): Observable {
        return Observable.defer {
            return@defer Observable.just(course)
        }
    }
  
}


Kotlin
val course = Gfg()
val courseObservable = course.getCourseObservable()
val courseDeferObservable = course.getCourseDeferObservable()
course.price = "DSA"
courseObservable
.subscribe { brand ->
    Log.d("GfGExample", "courseObservable : $course")
}
courseDeferObservable
.subscribe { brand ->
    Log.d("GfGExample", "courseDeferObservable : $course")
}


我们在上面描述的 GfG 类中有两个方法:

  1. getCourseObservable() :这个函数通过使用 Observable.just( couse)简单地返回 Observable
  2. getCourseDeferObservable() :Observable 是通过使用 Observable.just(course) 返回的,但包含在 Observable defer() 中。

现在,让我们测试这两种方法,看看会发生什么。

科特林

val course = Gfg()
val courseObservable = course.getCourseObservable()
val courseDeferObservable = course.getCourseDeferObservable()
course.price = "DSA"
courseObservable
.subscribe { brand ->
    Log.d("GfGExample", "courseObservable : $course")
}
courseDeferObservable
.subscribe { brand ->
    Log.d("GfGExample", "courseDeferObservable : $course")
}

首先,我们要制作价格对象。然后,使用价格对象,我们同时使用 getCourseObservable 和 getCourseDeferObservable 方法来检索可观察值。然后我们将课程的商标指定为“DSA”。之后,我们订阅两个 observables 以确定课程的价格

上述代码的输出:

GfGExample: courseObservable : DEFAULT
GfGExample: courseDeferObservable : DSA

在这里,我们可以看到 courseObservable 接收“DEFAULT”作为课程名称,而 courseDeferObservable 接收“DSA”作为课程名称。因为没有使用 defer运算符,所以 courseObservable 返回旧值“DEFAULT”。因为使用了 defer运算符,所以 courseDeferObservable 返回最新的值“DSA”。它表明 Defer 不会生成 Observable,直到观察者订阅并且每个观察者收到一个新的 Observable。

结论

有两个关键点需要记住:

  1. 在观察者订阅之前不会创建 Observable。
  2. 对于每个观察者,Defer 会生成一个新的观察者。

因此,我们可以利用 RxJava Defer Operator 来解决这个有趣的问题。希望这篇文章能帮助你理解这个话题!

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!