我听说了缓冲区。似乎窗口类似于缓冲区。
他们之间有什么区别?为什么它被称为“窗口”?缓冲区是窗口的特殊化
窗口会立即通知您新窗口,以及观察该窗口中的值的可观察窗口
相反,缓冲区不会立即通知您新窗口。相反,它在内部收集窗口中的项目。当窗口完成时,缓冲区将发送一个包含窗口中所有项目的数组通知
从概念上讲,您可以使用window编写buffer,如下所示:
Rx.Observable.prototype.buffer = function () {
return this.window
标签: Rxjs
frpbacon.jskefir.js
我从按钮点击事件创建了一个流。该按钮对应于数据库上的创建操作。显然,我希望数据库操作只触发一次(至少在它完成之前)。是否有一种方法可以忽略createButtonStream上的事件,直到Api.create返回?i、 例如,第一个事件应该调用#Api.create,后续事件应该被忽略,直到#Api.create返回
createButtonStream
.flatMap(() => Api.create()) //Needs to fire once until doSomethi
存在一个不完整的可观测值,它可以有或没有n个值的重放。我想从中获取最后一个值,如果还没有,则只获取下一个值
这适用于使用first()和take(1)()的第一个可用值:
但是对于最后一个值,last()和takeLast(1)等待可观察到的完成-这不是理想的行为
如何解决这个问题?有专门的操作符吗?我有一个针对ReplaySubject(2)的解决方案,它“排出”序列以获取最新的元素,如果序列为空,则只取最后一个元素,但是,它很麻烦,而且扩展性不好(例如,如果您决定将replay大小增加到3)
标签: Rxjs
observablerxjs5rxjs-dom
我有下一个可观察的对象,我试图过滤以获取网络中的用户,但是.mapTo(phone=>verifyPhoneInNetwork(phone,country))返回AjaxObservable,而不是ajax响应
function verifyInNetwork(contacts: any, country: string) {
const inNetworkOb = Observable
.from(contacts)
.map(contact => contact.p
标签: Rxjs
observableangular-http
我想返回一个observate,它返回两个值(在数组或dict中),其中一个值是第一个的条件http请求
以中的示例为例,我想修改以下内容:
import { Component } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/ad
我正在使用Observable.interval计划在指定时间执行代码:
let obs = Observable.interval(50).subscribe(()=>{
console.log(this.currentFrame+" "+new Date().getTime());
this.currentFrame++
});
这是输出。正如你所看到的,经过6次迭代,我已经有了10毫秒的漂移。如何使用Observable.interval,但同时指定它需要根据当前漂移重新
这是一个有点概念性的问题,所以如果不符合主题,请告诉我
我正在考虑编写另一个库来处理队列中的消息—在本例中是Azure存储队列。创建一个可观察对象并在每次有消息可用时向其中抛出消息是非常容易的
然而,这里有一个障碍,我不知道如何处理。问题是:处理完消息后,需要调用存储队列上的API来实际删除消息。否则,可见性超时将过期,消息将重新出现以再次退出队列
作为一个例子,下面是这个循环在C#中的外观:
公共事件事件处理程序OnMessage;
公开募捐
{
while(true)
{
//阅读信息
va
标签: Rxjs
rxjs5redux-observable
似乎debounceTime忽略了对其主题next方法的内部调用:
var subject: Subject<number> = new Subject<number>();
subject.pipe(
tap((a) => console.log("tab:" + a)),
debounceTime(300),
).subscribe((a) => {
console.log(a);
subject.next(100)
我将nativescript项目升级为Angular 6,但现在运行它时,立即出现以下错误:
JS: bootstrap: ERROR BOOTSTRAPPING ANGULAR
JS: bootstrap: operators.share is not a function
JS:
JS: TypeError: operators.share is not a function
JS: at new ApplicationRef (file:///data/data/io.neocle
我有一个过滤器数组作为一个可观察的,我想从中添加/删除过滤器。下面是我的代码,它当前仅在函数第一次运行时添加一个过滤器
第二次什么也没发生
private _filters$ = new BehaviorSubject<Filter[]>([]);
addFilter(added: Filter) {
debugger
// adding to array of filters
this._filters$.pipe(
tap(d =>
标签: Rxjs
reactive-programming
我想知道是否有人能帮我建立解决方案的理论。我从一个轮子事件中创建一个可观察的对象,阻止默认动作,将其限制在200ms,映射deltaY(我可以使用它来确定方向),然后共享它
我的问题是,它发出的值比我需要的要多,从而造成了这样一种情况,即我的订阅者即使在所需的操作发生后仍会继续开火。我是RxJS的新手,所以请容忍我,但是。。。有没有一种方法可以让我在一系列的值中,比如说,经过X个时间量后,得到“第一个”值,而不让可观察到的值完成
下面是代码
import { fromEvent } from '
我发现以下构造让我有点困惑(typescript中提供的示例):
但是Subject类确实有一个成员方法unsubscribe。这与方法一致,即受试者既是可观察者又是观察者,但从我在执行以下操作时实际取消订阅的内容来看:
someSubject.unsubscribe();
我是否取消了与此主题相关的所有其他订阅?看来我有点急着问了一个问题。无论如何,因为我认为这并没有很好的文档记录,如果您通过一些共享服务提供您的主题,可能会导致可怕的错误,下面是示例代码:
a = new Rx.Subjec
如何根据接收到的值为可观察对象或主体生成新值
例如:
假设我有一个可观测的,由于web API,它发出一个随机数
如果它是一个偶数,我希望可观察到的发射另一个随机数,使用第一个作为种子。。。依此类推,直到我得到一个奇数
请注意,我事先不知道我将提出多少请求
到目前为止,我一直试图用“奇怪的”递归方法来实现这一点,但我觉得必须有一种非常合适的方法来实现这一点。似乎可以使用expand()来实现这一点
const source$ = /* some API call that returns an
我需要订阅一个结果,但要等待中间操作完成后才能获得结果。诀窍是我“访问”我的结果以填充它:
// a service that gets a model
service.getModel(): Observable<MyModel>;
// I need to enrich my model before consuming it
service.getModel()
.makeSureAllCodesAreFetched(data => visitModel(mod
标签: Rxjs
angular7switchmap
下面是我的代码,当用户选择tab时,我想取消现有调用并加载用户单击的tab详细信息
我知道我必须使用switchmap(如果不正确或更好的选择,请指导我)
我遵循这个示例,但它不适用于我,因为id具有Valuechanges属性
app.component.html
单击事件将发出我在每次按钮单击中选择的按钮
托普芬基
罗兰
卢卡斯
{{user.name}
{{user.location}
应用程序组件.ts
声明要订阅的主题,单击按钮。
debounceTime设置为500ms,在发出所
假设我有3个观测值:
const numpad1$ = fromEvent(document, 'keydown')
.pipe(
startWith(0),
filter(({ key, code }) => key === '1' && code === 'Numpad1'),
map(() => 1),
scan((a, b) => a + b, 0),
);
const numpad2$ = fromEvent(docu
如果主题以某种方式发出无效类型,我希望触发observers错误回调
通过检查返回值的真实值,有一种检查未定义值的变通方法,但这会使未定义值到达下一个回调
public priceChange=新主题()
这个。价格变化。订阅({
下一步:更改=>。。,
错误:err=>。。,
})
这个。价格变化。下一个(42)
this.priceChange.next(未定义)
这个.priceChange.next('Potato'))
我只希望在下一个回调中调用有效值,即42。其他值应仅到达错误回调
标签: Rxjs
sveltederivedrxfire
我在下面的代码中使用派生存储。这感觉像是一个奇怪的构造,因为我只将派生构造用于动态$session依赖项并获取数据。但不是用$norm。我只使用$norm一次来启动派生存储
尽管如此,它似乎运作良好。但是如果$session发生变化,我必须续订。是否可以在不取消订阅的情况下更新RxFire/RxJs订阅
let normDocRef = null;
let normData = null;
let normSubscription = null;
const norm = derived(
标签: Rxjs
ngrxngrx-effects
我有一个对/accounts的调用,我只想在用户登陆的任何页面上立即调用一次。一旦打了这个电话,它要么将用户踢回主页,要么将该信息添加到商店。如果它在商店里,我不想再叫它
目前,我正在尝试使用take(1):
在我们将帐户信息加载到商店后,我看到loadInProgress在之后的任何loadAccounts呼叫中都会被卡住。加载帐户的操作有@ShowInProgressIndicator(ActionTypes.LoadAccounts),加载帐户成功/失败则有@HideIndicator(A
到目前为止,我对Rxjs的理解是observeable是一个流,我们可以使用observest的next方法“推送”流中的新值。然后我订阅流以接收值。但我无法理解管道是如何工作的。例如
我可以创建一个可观察的,如下所示
var observable = Rx.Observable.of('foo', 'bar');
那我就可以了
var subscription = observable.subscribe(x=>console.log(x))
在何处以及如何在上面创建观察者
谁在调
标签: Rxjs
angular5observablebehaviorsubject
在一个服务的构造函数中订阅行为主题变量时,我遇到了一个问题。当ok的值为0时,订阅第一次发生,但当我执行时。next(1)在服务1中,订阅未在服务2的构造函数中发生
服务1:行为主体变量发出的位置
counter: number = -1;
ok: BehaviorSubject<any> = new BehaviorSubject(0);
if (this.counter === 0) {
setTimeout(() => {
this.c
在我的AppComponent.ts文件中,我使用HttpClient进行了一个HTTP GET调用
import { Component } from '@angular/core';
import { Observable, Subscriber, Unsubscribable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
te
标签: Rxjs
rxjs-pipeable-operators
有没有一种方法可以通过管道操作符跟踪值
举个具体的例子,我想:
通过数据流S:
记忆S当前数据
发出HTTP请求
用回应做一些事情
使用操作结果发出另一个HTTP请求
创建一个包含基于1.和响应的值的对象
然后合并这些并利用我创建的对象
基本上
const data=from([1,2,3])管道(
//记住这里
map(a=>req1(a)),
平面图(a=>a),
映射(b=>syncOp(b)),
map(c=>req2(c)),
平面图(d=>d),
映射(e=>({id:_记忆的,值:
尝试模拟HTTP请求,并使用异步管道呈现静态数据
ts:
footerContent$:可观察[]=([
of({key:'1',value:'a'}),
of({key:'2',value:'b'}),
of({键:'3',值:'c'})
])
HTML:
{{content.value}
在这里,我得到了一系列的可观测数据,而管道似乎不起作用
错误:InvalidPipeArgument:'[object],[object]
管道“AsyncPipe”的对象“,[Object]”
然后
我有一个我想不出来的
基本上,我有一个多态事件流,并希望订阅一个给定状态下的可观察“while”,即前一个emit是相同类型的事件,然后保留订阅并代理该事件
Events = (A|B)
stream: A1 A2 B1 B2 B3 A3 A4 A5 B4 B5 B6
^------^ ^------^
subscribed subscribed
问题是如何在不重新分配的情况下附加可观察对象
i、 e
很明
如何在该应用程序中使用rxjs?我尝试添加lib,但它不起作用
按下libs旁边的+按钮并键入rxjs。然后选择rxjs.umd.js
现在您可以像这样使用rxjs了
const { Subject } = rxjs;
const subject$ = new Subject();
subject$.subscribe(val => { console.log(val); });
subject$.next('Hello world');
与在StackOverflow上使用代码
开始使用NestJS时遇到了一个问题,如何在Observable中抛出异常
public getGuild(guildId: string, token: string): Observable<Guild | undefined> {
const guild = this.httpService
.get<Guild[]>(url, {
headers: { authorization: token },
})
.pipe(map
我有以下几点
const timer1 = interval(1000).pipe(take(10));
const timer2 = interval(2000).pipe(take(6));
const merged = merge(timer1, timer2);
merged.subscribe(x => console.log(x));
现在,这将只提供最新的可观测发射值
我希望,当一个发射时,我从另一个发射得到新值和最新值
我试图使用zip,但它不会使用最新版本。检查下面的屏
在我从rxjs 6.5切换到rxjs 7之后,我面临着这个奇怪的错误。我不确定这是rxjs 7的打字问题还是stackblitz()的问题:
很有趣。如果我放入一个名为rxjs@7.0.0-rc.3,那么它似乎可以工作了。不知道为什么。Eric Simons(Stackblitz的首席执行官)在推特上写道:“我们正在讨论摩纳哥的上游问题,不支持最新版本的打字:(应该在明天或下周进行修复。编译/服务应该仍然有效!”@DeborahK这也解释了为什么编译工作正常。我应该在推特上关注Eric:)
下面是Ngrx示例中的代码:我的问题是为什么在第一个@Effect中,它使用switchMap,而其他的使用mergeMap。这是因为第一个@Effect处理的是网络,并且通过开关映射可以取消上一个正在运行的网络请求吗
@Effect()search$=this.updates$
.whenAction(BookActions.SEARCH)
.map(toPayload)
.filter(查询=>query!='')
.switchMap(查询=>this.googleBooks.search
标签: Rxjs
observablesubscribe
简化如下代码示例的方法是什么?
我找不到合适的接线员。。谁能举个简单的例子
this.returnsObservable1(...)
.subscribe(
success => {
this.returnsObservable2(...)
.subscribe(
success => {
this.returnsObservable3(...)
.subscrib
我的情况是:我有一个数据存储,在那里我可以得到可以使用RxJS观测值观测的模型。一般类型签名是
const foo = new Model({id: 123}, dataStore);
foo.asObservable().subscribe((v) => /* do stuff with values of this model */ );
一般的概念是,将数据视为可观察数据有两种帮助:(a)当您遇到冷缓存情况(如浏览器的localStorage有一些过期数据)但仍希望在提取实际数据时
我想用RxJs实现一种多生产者多消费者队列。基本上我有一些工作的生产者和一些消费者(工人)。我想接受一份工作,并以循环方式将其发送给下一个可用的工人。直到现在我才知道
let src = Rx.Observable.from(this.producers).mergeMap(
(producer) => Rx.Observable.fromPromise(producer.getJobs).mergeMap((jobs) => Rx.Observable.from(jobs))
标签: Rxjs
rxjs5angular-observable
我试图找出一个好方法来表示ReplaySubject当前为“空”
将数据传递给next()方法是否是表示ReplaySubject(暂时)为空/没有事件的最佳方式?现在,我想您可以设置一个辅助观察对象来告诉您要重放的最后一个项目是什么:
const last$ = rs.replay(1);
然后你只需组合测试和扫描。。。一旦您到达last$发出的项目,则您的ReplaySubject将完成重放:
this.sub = Observable.combineLatest(
rs,
las
试图同时学习和使用RxJS,这被证明是相当棘手的
以下是我的要求-我有一个微调器组件,从其isLoading属性设置为true时开始:
如果在initialDelay之前将isLoading设置为false,则它不会显示
如果initialDelay之后但minSpinTime之前的isLoading设置为false,它将持续minSpinTime,然后消失
如果initialDelay之后和minSpinTime之后isLoading被设置为false,它将显示,然后与isLoading同步
标签: Rxjs
observableflatmap
我有一个来自firebase集合的可观察对象,其中包含作为流的对象
我想过滤这些对象,然后将它们映射到另外两个属性,但是我无法让它工作
this.firestoreService.colWithIds$('stuff',
ref => ref.orderBy('createdAt', 'desc')
.limit(20))
.pipe(
map((outputArray: any[]) => {
return skills.map(s =>
我有需要迁移到RxJS 6的遗留代码。有一行我不知道如何迁移它:
return empty(this.scheduler);
this.scheduler是传递给类构造函数的某个调度器
我找到了关于如何迁移empty(),只需使用contantempty,但如何使用调度程序创建空的可观察对象的说明?2019年3月更新:有一个打开的PR添加了emptyScheduled()方法:
empty()可观察的创建方法现在也不推荐使用,建议使用empty:
import { EMPTY } from '
标签: Rxjs
graphql-jsapollo-server
在Apollo Server中,您似乎必须为订阅解析程序创建一个异步迭代器:
const rootResolver = {
Query: () => { ... },
Mutation: () => { ... },
Subscription: {
commentAdded: {
subscribe: () => pubsub.asyncIterator('commentAdded')
}
},
如果用户通过可观察的mousemove事件快速拖动,我们不需要发出每个px此事件,只有当他尝试在放置元素之前瞄准时(我们可以捕捉到此时bcs鼠标速度将很低),是否有任何技巧
mb在某些情况下,通过px/秒获得速度,然后进行过滤等。您可以成对比较鼠标位置,测量事件之间的距离并过滤掉高速移动:
const{fromEvent}=rxjs;
const{pairwise,map,filter}=rxjs.operators;
const block=document.getElementById('
我使用的是fromEvent,但我切换到了fromEventPattern,这样我就可以console.log进行故障排除。我看到,当我unsubscribe()时,只调用第一个fromEventPatternremove方法。有人知道为什么不调用窗口的removeeventlistener('online')和offline的删除处理程序吗
如果我从.pipe中删除startWith(window.navigator.onLine),它会工作,但我至少需要其中一个startWith(windo
标签: Rxjs
reactive-programmingunirx
我如何构造一个可观察的流,它将发出一个值,然后在x个时间量内跳过后续值
我尝试过使用节流和skipUntil和延迟的组合,但我需要忽略给定间隔内发出的所有值,而不是延迟
用例是,我有一个按钮,最多每X秒可以点击一次。我相信您实际上可以使用throttleTime为此,它将放弃限制结果:
const source$ = fromEvent(this.myButton, 'click');
source$.pipe(
throttleTime(1000),
)
见文件:
我相信您实际上可以使
我无法理解如何在NestJS应用程序中映射HttpService的数据属性。据我所知,这个可观察的只是包装了axios。下面是一些示例代码:
interface Todo {
task: string,
completed: false
}
import {
Injectable,
HttpService,
Logger,
NotFoundException,
} from '@nestjs/common'
import { map } from 'rxjs/ope
我需要动态填充我的[options]数组,一旦用户完成键入,我需要进行API调用并获取我的选项列表
为了避免多个API调用,我想使用rxjsdebounceTime(1000)
有没有办法使用去BounceTime?或者还有其他推荐的选项吗?您可以使用缓冲区和api调用而不是ajax来使用此技巧
import { fromEvent, timer } from 'rxjs';
import { debounceTime, map, buffer, switchMap } from 'rxjs/o
标签: Rxjs
rxjs6rxjs-observablesrxjs-pipeable-operatorsrxjs-marbles
考虑到我有以下代码:
let Rx=window['rxjs'];
常数,
队列调度器,
作为调度员,
异步调度程序,
animationFrameScheduler
}=Rx;
const{observeOn,tap}=Rx.operators;
console.clear();
让source$=of(1,2,3,asapScheduler).pipe(
轻触((v)=>{
控制台日志('tap',v);
}),
)
source$.subscribe((v)=>{
console.log
假设我使用以下方法从对象数组中检索所有“年”,然后获取不同的值:
public getYears(): Observable<number[]>
{
return Observable.from(this.payments.map(p => p.year)).distinct().toArray();
}
这样做足够了还是更好:
let sub = this.getYears().subscribe(years => this.yearsRefinement =
在Javascript中,切换值非常容易:
我知道,可观测值通常不打算以这种方式使用,但使用它们的索引交换两个元素真的有那么困难吗:
// assumption that index < newIndex
var values = [...];
var values$ = Rx.Observable.from(values);
var swapValues$ = values$
.take(index - 1)
.concat(
values$
我想在每次按下鼠标时订阅mousemove事件,在每次向上单击鼠标时取消订阅
// start when mousedown
Observable.fromEvent(element, 'mousedown')
.subscribe(() => {
Observable.fromEvent(element, 'mousemove')
// finish when mouseup
在我的应用程序中,我有一个案例如下,我想知道如何以更好的方式进行:
// the effects function
this.user$ = this.actions$.pipe(
ofType(UserActions.FETCH_USER),
switchMap((_) => {
return userService.getUser().pipe(
map((res) => {
return new UserActions.FetchUs
我正在尝试合并来自3个不同流的最新值,忽略其中一个(或多个)尚未发出任何值
const myStream1$:Observable<>=// steam from somewhere,
myStream2$:Observable<string>=// steam from somewhere,
myStream3$:Observable<string>=// steam from somewhere;
Obse
标签: Rxjs
rxjs-observables
当我运行下面的代码时,我得到了期望的结果,然后在另一个可观察对象完成时,重新订阅延迟的共享可观察对象
const source = interval(1000).pipe(
take(5),
share());
source.subscribe(x => console.log('c1', x));
source.pipe(
delay(2000), // doesn't delay subscription buffers the output from int
1 2 3 4 5 6 ...
下一页 最后一页 共 38 页