- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
您好,我想知道以下代码是否按顺序执行?即日志记录“Worker has finished task C”是否总是发生在日志记录“Finished 3 task(s)”之后?
长问题:使用scan
运算符,我可以确定任务是按顺序执行的,我并不担心。让我担心的是,我希望最后一个订阅仅在任务 C 完成后才做某事,我不确定放置 o.complete()
的位置是否能保证这一点。例如将 start()
运行 do.("A") -> do.("B") -> do.("C")
而无需等待扫描完成并立即运行 o.complete()
,给出输出:
Worker has finished task C
Doing task A
Finished 1 task(s)
Doing task B
Finished 2 task(s)
Doing task C
Finished 3 task(s)
如果是这种情况,您如何修复代码以实现我所描述的?
https://stackblitz.com/edit/typescript-xhhwme
class Worker {
private tasks: Subject<string>;
public init(): Observable<number> {
this.tasks = new Subject<string>();
return this.tasks.scan((count, task) => {
console.log("Doing task " + task);
return ++count;
}, 0).asObservable();
}
public do(task: string): void {
this.tasks.next(task);
}
}
function start(worker: Worker): Observable<void> {
return Observable.create(o => {
const monitor = worker.init();
monitor.subscribe(c => console.log("Finished " + c + " task(s)"));
worker.do("A");
worker.do("B");
worker.do("C");
o.complete();
worker.do("D");
});
}
const worker = new Worker();
start(worker).subscribe({
complete: () => console.log("Worker has finished task C")
});
最佳答案
TLDR:Subject.next
是同步的。
如果源是同步的,则 react 流是同步的,除非您明确将它们设为异步或将它们与异步流混合。这些都不会发生在您的代码中。一些例子:
//Synchronous
of(1,2)
.subscribe(console.log);
//asynchronous because of async source
interval(1000)
.subscribe(console.log);
//aynchronous because one stream is async (interval)
of(1,2)
.pipe(
mergeMap(x => interval(1000).pipe(take(2)))
)
.subscribe(console.log);
//async because we make it async
of(1,2, asyncScheduler)
.subscribe(console.log);
您的示例中发生了什么? Observable.create
中的所有内容都将立即执行。当您调用 worker.do("A");
时,this.tasks.next(task);
发出一个新值,tasks
流链被执行(同步)。 B
和 C
也是如此。
当您调用 o.complete();
时,start(worker)
流完成并打印 "Worker has finished task C"
.然后 D
由 tasks
流执行。
您可以在这些文章中找到有关异步/同步行为的更多详细信息:
关于typescript - Rxjs Subject#next 是否异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51078374/
如果 Subject 继承自 Observable,那么基于任何 Subject 的下一个选项有什么区别,例如: private val locationSubject: ReplaySubject
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试从内部使用 Rx.Subject 的函数返回一个可观察对象。当然,与任何好的 API 一样,实现细节应该完全从消费者那里抽象出来。但是,使用 Subject.asObservable() 似
我使用 angular2 rxjs 来测试它的多播功能,这是我的代码: var source = Observable.from([1, 2, 3]); var subject = new Subje
我需要一个可以显示每个主题的最高分数计数的查询。假设 3 名学生的科学成绩需要达到 98 分 count marks subject 3 98 Maths 最佳答案 首先找到每个
我正在使用JavaFX 11(OpenFX)运行一些应用程序。该应用程序是用IntellijIdea编写的,并使用gradle构建。在IDE中运行时,一切正常。构建jar时,它构建成功,但是当我尝试执
我继承自模板类。当我进入教师类(class)时,我想进入学科类(class),反之亦然。我收到错误 Invalid use of incomplete type struct Subect; void
Angular 2 和 Typescript 应用。 我在 NPM 包中有一个抽象类,我试图在我的应用程序代码中提供实现。这一切都很好,直到我添加了公众 isLoggedIn:Subject;属性(p
我从 this tutorial 中提取了示例模板代码并执行以下两个步骤开始 - npm install//工作正常并创建了包含所有依赖项的 node_modules 文件夹 npm 开始//失败并出
我需要答案来显示最低分和最高分,同时给出正确的主题 import java.util.Scanner; //import package class Task11 { public stati
如果我的这个类有一个在其生命周期中发出单一值的主题: export class MyClass { myEmitter$: Subject = new Subject(); someMetho
我正在尝试用 ionic 制作一个小应用程序,但是当我从 UI 调用 $scope.saveClass() 函数时它给了我这个错误。 无法获取未定义或空引用的属性“subject” 我不明白,因为他不
背景 我有一个核心数据实体 Entry 与另一个实体 DataField 有关系: class Entry: NSManagedObject { //[...] @NSManaged
我知道这个问题更像是一个语法问题,但是如果你有一组 Penn Treebank 标记,你如何确定句子的“主题”,例如: [WP][VBZ][DT][NN] 是否有任何 Java 库可以接收此类标记并确
我使用 SwiftUI 构建了一个 LoadingView,用于在我从 API 获取远程数据时显示我的应用程序中的一些加载内容。我正在使用 Xcode 版本 11.0 beta 5。 这是Loadin
Subjects 介绍 1. Subjects 是订阅者,也是Observable 订阅者:它能动态的接收新的值。 Observable: 当Subjects有了新值后会通过Event将新值发
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
我需要了解主题在 Weblogic 中如何存储和传播。 经过身份验证后,主题存储在 HTTP 层的哪里?在内部,它存储在 HTTPSession 中吗? 同理,EJB层存储在哪里? 我有一个应用程序,
我经常遇到这样的情况,我想要一个 UI 元素来“观察”一个基础值——假设我正在显示一个 int——我想要一个我可以订阅的 IObservable。 我下面一直用的是Subject,直接设置就可以了
我有一个简单的服务。 import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export cl
我是一名优秀的程序员,十分优秀!