在下面的代码块中,

let ob = of(1,2,3);
ob.subscribe((v)=>{
   console.log(v)
})
console.log("end")

这些值是同步发出的。 订阅中的功能是否可以保证在打印end之前执行? 因此输出将始终为。

1
2
3
end

#1楼 票数:2 已采纳

如果您的可观察流仅运行同步代码,是的,就像同步运行正常的函数执行一样,但是如果异步,它将异步运行,而promise将始终异步运行

您代码的异步版本将类似于

let ob = of(1,2,3).pipe(mergeMap(num=>timer(0),_=>num);
ob.subscribe((v)=>{
   console.log(v)
})
console.log("end")

#2楼 票数:1

如果可观察对象稍后发出,则不会

 const { BehaviorSubject } = rxjs; let bs$ = new BehaviorSubject(1); setTimeout(() => { bs$.next(2); }, 500); setTimeout(() => { bs$.next(3); }, 1000); bs$.subscribe(v => { console.log(v) }); console.log('end'); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script> 

#3楼 票数:0

可观察的是Stream of Data不是async functions 同步运行,并且取决于osbervable内部的逻辑,它会一次或多次(例如of运算符)同步调用next方法,或者像在SetTimeout函数内部调用next方法一样异步调用next方法。

  ask by bridgewater translate from so

未解决问题?本站智能推荐:

1回复

Rxjs如何知道有多少订阅者可观察到?

当我有一个observable的多个订阅者时,例如: 我怎么知道有多少订阅者仍然注册到myInterval可观察对象? 我需要这些信息,以防止内存泄漏 ,以防我忘记取消其中一个?
1回复

可观察对象中的“订阅”

假设我有这个服务 export class CacheApiService { ... updateTokenCache() { const url = `${this.consultationBaseURL}/cache/idm/updateTok
4回复

使用 WebSocket 可观察的 RxJs

我的 angular 应用程序使用 websocket 与后端通信。 在我的测试用例中,我有 2 个客户端组件。 Observable 计时器按预期打印两个不同的客户端 ID。 每个 ngOnInit() 还会打印其客户端的 ID。 现在由于某种原因,对于每条消息调用 websocketSe
4回复

Rxjs 可观察订阅数

在我的 Angular 2 应用程序中,我有许多可观察对象和订阅。 当然,我应该在离开页面时取消订阅,但我想知道是否有可能获得活动订阅的数量。 仅用于调试信息或当我忘记取消订阅时。 rxjs 中有这样的信息吗?
1回复

rxjs可观察订阅模式

我将以下角度组件重构为使用可观察对象,而不是使用get set和private成员: 重构组件: 有没有调用的方式toggleLoading功能自动将前和后fooService.fooFunction被执行,而不是手动调用toggleLoading之前和之后调用fooServic
2回复

rxjs如何传递可观察到的地图

我是angular和rxjs的新手-基本上我有一个pipe函数,它需要几个运算符,其中一个需要一个带有三元数的“ map”,该三元数是一个空数组或另一个可观察到的值,该值来自http请求: 我知道自己做错了,我只是不知道-我在浏览器中遇到错误: 找不到类型为“对象”的其他支持对
5回复

RxJs 数组的 Observable 到 Observable 的数组

对于在 TypeScript 中使用 Angular2 编写的 Web 应用程序,我需要使用 RxJs Observable s。 由于我以前从未使用过 rxjs,而且我对反应式编程一般来说还是新手,因此有时我很难找到正确的方法来做一些特定的事情。 我现在面临一个问题。 我必须将Array<O
2回复

RxJs可观察到如何处理成功

有没有办法在Angular服务中而不是在Angular组件中(通过订阅)来处理RxJs POST或GET(或与此相关的所有CRUD操作)的成功? 我想设置一个BehaviorSubject来发出用户已成功登录的信息。我正在考虑通过我的BehaviorSubject( this.logged