官术网_书友最值得收藏!

The never and throw operators

The empty operator was discussed in Chapter 3, Functional Programming with ReactiveX. This operator is one of a triplet of similar operators: empty, never, and throw. The behavior of each of these operators should be clear from their names, as follows:

  • The empty operator creates an empty observable that completes immediately
  • The never operator creates an observable that never completes
  • The throw operator creates an observable that immediately completes on error

The following figure shows the marble diagram of the never operator:

Figure 4.5: The never operator

The following figure shows the marble diagram of the throw operator:

Figure 4.6: The throw operator

Their prototypes are as follows:

Observable.never()
Observable.throw(exception, scheduler=None)

Note that the never operator does not have a scheduler parameter. Since it never emits anything, there is no need for scheduling! The throw operator accepts any object in the exception parameter. If the provided value is an exception, then it is sent as-is. If the provided value is not an exception, then this value is encapsulated in an exception object before being notified. So, the observer of this observable will always receive an exception in its on_error handler.

The following code shows two ways to use the throw operator:

error = Observable.throw("Something wrong happened")
error.subscribe(
on_next=lambda i: print("item: {}".format(i)),
on_error=lambda e: print("error: {}".format(e)),
on_completed=lambda: print("completed")
)

exception = Observable.throw(NotImplementedError("I do nothing"))
exception.subscribe(
on_next=lambda i: print("item: {}".format(i)),
on_error=lambda e: print("error: {}".format(e)),
on_completed=lambda: print("completed")
)

The preceding code will provide the following results:

error: Something wrong happened
error: I do nothing
主站蜘蛛池模板: 饶阳县| 化州市| 恩平市| 白沙| 宜城市| 台山市| 漠河县| 洮南市| 游戏| 安岳县| 宣恩县| 崇仁县| 二连浩特市| 永福县| 四平市| 尼玛县| 嘉禾县| 甘南县| 延川县| 岳阳市| 汕尾市| 安仁县| 天祝| 大竹县| 金秀| 盐亭县| 张家港市| 南开区| 呼玛县| 林周县| 集贤县| 宣武区| 庄河市| 翼城县| 巴彦淖尔市| 平邑县| 临沭县| 大名县| 高邑县| 宝鸡市| 浦江县|