首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建一次性订阅

创建一次性订阅
EN

Stack Overflow用户
提问于 2015-01-18 14:38:20
回答 6查看 107.4K关注 0票数 216

我需要创建一个对Observable的订阅,它在第一次被调用时会立即被处理掉。

有没有类似这样的东西:

代码语言:javascript
复制
observable.subscribeOnce(func);

我的用例是,我在一个快速路由处理程序中创建了一个订阅,该订阅在每个请求中被多次调用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-01-20 01:33:46

不是百分之百确定您需要什么,但是如果您只想观察第一个值,那么使用first()take(1)

代码语言:javascript
复制
observable.first().subscribe(func);

注意:当满足条件时,.take(1).first()都会自动取消订阅

从RxJS 5.5+更新

来自Coderer的评论。

代码语言:javascript
复制
import { first } from 'rxjs/operators'
    
observable
  .pipe(first())
  .subscribe(func);

Here's why

票数 380
EN

Stack Overflow用户

发布于 2015-03-26 01:20:39

RxJS有一些我见过的最好的文档。点击下面的链接,你会看到一个非常有用的表格,它将用例映射到运算符。例如,在“我想取第一个值”用例下有三个运算符:firstfirstOrDefaultsample

请注意,如果一个可观察的序列在没有通知的情况下完成,则first操作符通知订阅者一个错误,而firstOrDefault操作符向订阅者提供默认值。

operator use case lookup

票数 37
EN

Stack Overflow用户

发布于 2019-01-23 22:54:41

为了补充@Brandon's answer,使用first()等对于基于其Observable更新BehaviorSubject也是必不可少的。例如(未测试):

代码语言:javascript
复制
var subject = new BehaviorSubject({1:'apple',2:'banana'});
var observable = subject.asObservable();

observable
  .pipe(
    first(), // <-- Ensures no stack overflow
    flatMap(function(obj) {
      obj[3] = 'pear';
      return of(obj);
    })
  )
  .subscribe(function(obj) {
    subject.next(obj);
  });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28007777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档