Rxjs-将异步响应与同步响应合并

我开始使用RxJs 5制作功能链,并非常喜欢它。我注意到我经常遇到的一种模式,但无法找到使用RxJs方法解决它的方法 我使用值获得一些异步数据,然后将它们与值本身合并 让我用代码向您展示: Rx.Observable.fromPromise(somePromise) // doesn't really matter .flatMap(value => { // this is the original value I have const promise = aFunctio

Redux Observables/RxJS:如何使epic根据if/else返回不同的操作?

我正在尝试使用以下方法将我的应用程序与应用程序内购买连接: 我有一部史诗,我想在成功的时候释放成功,失败的时候释放失败。大概是这样的: import 'rxjs'; import { InAppUtils } from 'NativeModules'; import * as packagesActions from '../ducks/packages'; import * as subscriptionActions from '../ducks/subscription'; expor

如何使rxjs大理石同步分组只占用一帧

据 那么我如何在第20帧上表示“发射a、b和c,然后在第40帧上完成” Ie如何阻止同步组本身占用帧?在他的评论中回答了这个问题 没有办法做到这一点-同步组将始终占用额外的帧,即使所有成员都出现在开始括号的帧中。您不能;对此您无能为力。您在问题中包含的文档中的示例描述了TestScheduler的行为。以防万一,这可能会有所帮助另外,还有一个提供此功能的替代库: '--(abc)-|': on frame 20, emit a, b, and c, then on frame 80 comple

RxJS:Pipe方法如何使操作符作为内部参数工作?

我一直在研究pipemethod源代码,但找不到任何关于触发作为参数的运算符的线索。 根据我在源代码中看到的,首先,pipe方法将操作作为参数,它是OperatorFunction类型,而不仅仅是操作符。然后,它调用pipeFromArray函数,将操作传递给它。在pipeFromArray函数中,它使用reduce方法迭代操作。这里是一个棘手的部分:我研究了map操作符,例如,pipe作为参数的操作(在本例中为mapOperation函数),除了返回一个新的可观察对象之外,什么也不做,该对象将

Rxjs 如何创建一个可观察的模型?

我想我理解了Rxjs中可观测值的概念,但我正在努力将理论转化为代码 我有一个角度分量,比如说C。我希望它应该显示特定的HTML组件,这取决于用户是否登录。为此,我使用的代码与 <ng-container *ngIf = "userNotloggedIn"> ... } 然后在组件中,我订阅可观察到的,如下所示: ngOnInit(){ this.userloggedIn = false; this.userManagementService.userSigned

如果我不';t导入*作为从“接收”;rxjs“;

我想知道为什么下面的代码不能编译 import {Observable} from "rxjs/Observable"; userSignedIn$: Observable<boolean>; //naming convention for Streams has $ in the end. this.userSignedIn$ = Observable.of(false) 默认情况下,的功能在可观察的原型上不存在。您必须通过执行导入“rxjs/add/observable/of”

如何创建带rxjs 5的pausableBuffer

我正在努力使我认为是一个 我让别人分享了他们的代码,但我不知道如何将其转换为自定义操作(没有typescript/只有ES6) const attach = Rx.Observable.timer(0 * 1000, 8 * 1000).mapTo('@'); const detach = Rx.Observable.timer(4 * 1000, 8 * 1000).mapTo('#'); const input = Rx.Observable.interval(1* 1000); cons

Rxjs 无限循环清晰动作史诗

我使用redux observable来处理redux异步操作 我需要通过id清除模块状态 这是我的ClearModuleByDepic: const clearModuleByIdEpic = (action$: ActionsObservable<any>) => { return action$.ofType(t.CLEAR_MODULE_BY_ID) .map((action: IActionPayload<any>): string =>

Rxjs 未调用redux可观察映射

我有这段代码,但无法理解为什么我没有进入map函数(在这里我有一条注释“我永远不会进入代码的这一部分”): 有人能在这里说点什么吗? 为什么使用subscribe时它工作,而在可观察对象上使用map时它不工作? 难道map不应该在每次可观察到的触发时被调用吗 谢谢, Jim.在您订阅您的可观测对象之前,它是冷的,不会发出值。订阅后,将调用映射。这是rxjs的一项功能,旨在避免不进行更改的操作(=没有用户使用这些值)。有很多关于这个主题的博客文章,在谷歌上搜索“冷的还是热的观测”,但在redux

RxJS:如何延迟RxJS.Observable.if中ELSE的执行?

我有一个可能存在也可能不存在的对象。我正在使用Observable.if来确定基于其存在的操作 但是,即使对象未定义,Observable.if的else部分似乎仍在运行。我收到以下错误:TypeError:无法读取未定义的属性“genesisHash” console.log("jjjjjjjjjjjjjjjj: ", t); // prints out jjjjjjjjjjjjjjjj: undefined return Observable.if( () => !t

RxJS concat方法签名

在concat.d.ts文件中,我们可以找到concat运算符的以下定义: export declare function concat<T>(this: Observable<T>, scheduler?: IScheduler): Observable<T>; export declare function concat<T, T2>(this: Observable<T>, v2: ObservableInput<T2>

rxjs mapTo操作符:在运行时计算返回值

假设有一个像上面这样的简单代码。我尝试的是在源流发出某些信息时记录值,但显然,我记录的值与源流的值无关。因此我考虑使用mapTo操作符,如下所示: function c() { return Math.random(); } source$.pipe( map(a => c()) ).subscribe(v => console.log(v)); 但正如你可能猜到的,值总是一样的。更准确地说,它保持为第一个值,这不是我想要的 所以我的观点是,我希

Rxjs 等待多个操作在epic中完成,然后再分派操作

我有一个组件,可以在其中分派多个操作: dispatch(action1()); dispatch(action2()); 我有一个epic,它监听这两个动作,并为每个动作调用ajax: export const fetchObservable = action$ => action$.ofType(...actions) // wait for either action .mergeMap(({ url, method, body, success, error, res

无法读取属性';地图';rxjs中未定义的

我是Angular 6.X和rxjs的新手。我正在尝试为单击操作实现可观察。它通过RestApi提取数据,但在数据['list']处低于异常。映射,我尝试了不同的方法,但都没有成功 get(): Observable<ProgramOwnerVulnerability[]> { //explicitly do not type this get, due to list structure returned return this.http

如何在RxJS中基于第一个响应发出多个Ajax请求

我正在使用redux observable epic,使用搜索端点从GitHub上的特定组织获取回购。我的主要问题是我需要按“观察者”进行排序,所以我需要所有的回购协议,但GitHub只允许每页最多返回100个。响应包括“total_count”,我可以用它来计算我还需要发出多少请求(共页)。以下是我目前的代码: export const fetchRepos = actions$ => actions$.pipe( ofType(FETCH_REPOS), switc

Rxjs 在订阅回调之前截获可观测值

我正在使用以下代码发出get请求: makeGetReq$(url:string):Observable{ let getReqObservable; getReqObservable = this.httpClient.get(url) //code for making get request return getReqObservable } 问题是有时我的后端可能返回状态代码为200的{error:true,message

Rxjs 有多少;温度“;是否存在可观测的Rx?

在Rx.Net的所有文献中,都有关于可观测的温度的参考文献 有冷观测(类似于Observable.Interval()和类似的工厂方法创建的观测),每次创建新订阅时都会产生副作用 在光谱的另一端,有热观测(如主题),它们将在新订阅到来时提供新的订阅 还有热观测,如RefCount()返回的观测,它将在每次创建一个订阅时执行初始化,但前提是没有其他活动订阅。Dave Sexton解释了这些热观测的行为: 或者,您可以调用Publish-then-RefCount来获取在多个连续观察者之间共享的IO

RxJs-concatMap替代方案,将所有内容都放在两者之间

我试图找到一个行为类似于concatMap的操作符,但在两者之间删除所有内容。例如,concatMap执行以下操作: 下一个 开始处理 下一个b 下一个c 处理完一个 开始处理b 完成处理b 开始处理c 完成处理c 取而代之的是,我正在寻找一种机制,它将丢弃b,因为c已经出现了: 下一个 开始处理 下一个b 下一个c 处理完一个 (跳过b) 开始处理c 完成处理c 有关更详细的示例,请参见此要点:在a上执行mergeMap之后,您可以尝试在b上使用race方法 我看起来像这样: a.pi

Rxjs 仅从ngrx存储选择器获取不同的值

我有一个函数,它检查网格是否已加载,如果未加载,它将触发加载。但目前,它会为相同的加载的值触发几次,因此它会多次调用相关操作。我的印象是商店选择器在默认情况下只发出不同的(更改的)值 我的职能 private gridLoaded(filters: FilteredListingInput): Observable<boolean> { return this.settings.states.Loaded.pipe( tap(loaded => {

Rxjs 序列异步redux可观察操作

我想对多个异步操作进行排序,当它们全部完成时,发出最终操作: const initializeEpic = (action$, state$, dependencies) => action$.ofType("INITIALIZE_APP_REQUEST").pipe( mergeMap((action) => [ getUserRequest(), getCoreDat

Rxjs 有没有更好的方法在第一次完成后调用api?

我试图找到处理API的最佳方法,当一些组件必须调用多个函数,但需要一步一步地等待时 我所做的一切都很好。但我不知道这样做是否正确。 有谁能指出或举个简单的例子来说明更好的解决方案吗 多谢各位 someService1().subscribe(res => { // result },(error =>{ // handle it },(()=> { someService2().subscribe(res2=>{ /// }) })); 您可以组合多个观察值以获得单个

Rxjs 如何正确使用share()运算符?

我有一个流,它是由RxBehaviorSubject的next()方法触发的。如何在订阅服务器之间共享pipedData$流 我尝试在这里使用share操作符,以避免map操作符中的大量重新计算,但没有运气-每个订阅者都会重新计算 还可以从源获取订阅者的数量吗 import { interval, BehaviorSubject } from 'rxjs'; import { take, map, tap, share, debounceTime } from 'rxjs/operators'

Rxjs HttpService的Nest.js处理错误

我正在尝试测试NestJS基于Axios的内置HttpService。不过,我在测试错误/异常状态时遇到了问题。在我的测试套件中,我有: let client: SomeClearingFirmClient; const mockConfigService = { get: jest.fn((type) => { switch(type) { case 'someApiBaseUrl': { return 'http://exa

Rxjs 在每个API调用等待前一个API调用的情况下,如何执行和处理可观察API调用的数组?

我一直在玩的是将CombineTest与concatAll()一起使用,但它们仍然被同时调用。我可以循环调用每一个,但我总是想知道RXJS工作流中是否有更好的方法 combineLatest(arrayOfApiObservables).pipe(concatAll()).subscribe(); 这里的问题是您使用了combinelateest操作符,该操作符只有在所有可观察对象发出后才会发出值(例如,它同时调用所有对象) 在此之后,concatAll不能影响arrayofapiobserv

RxJs-如何使可观察行为像队列一样

我正在努力实现下一个目标: private beginTransaction(): Observable() { .. } private test(): void { this.beginTransaction().subscribe((): void => { this.commitTransaction(); }); this.beginTransaction().subscribe((): void => { this.commitTra

Rxjs 从内部平面图通知

这里有一个相当复杂的示例: 主要内容: 可观察到: public runInstructionAndGetResult(): Observable<string> { return this.runAnInstruction() .flatMap((data) => { console.info("flatMap of runAnInstruction:", data); return this.getIn

Rxjs 如何使用管道观察

我想测试一个可观测的发射的每一个值,如果它符合某些标准,那么就把结果弄错,否则就把这个值传下去。有操作员吗?我不知道这是否是正确答案,但对我有效的是可以观察到的。创建 Observable.create((observer: Observer) => sourceObservable.subscribe((val: Value) => { if(condition) observer.next(val); else observer.er

';合并延迟错误';在RxJS 5中不存在

我在RXJS4中遇到了这个方法,它似乎非常有用,但是我似乎在RXJS5中找不到它 有人知道RxJS 5中的任何东西是否有类似的行为吗?您可以像那样为它添加一个多边形填充 函数mergeDelayError(…源:数组){ const final=新主题(); const catching=sources.map(obs=>obs.pipe( 捕捉错误(e=>{ 如果(!final.hasError){ 最终错误(e); } 返回空; }), )); 返回concat(合并(…捕获),最终);

RxJS-暂停一个可观察对象,直到第二个可观察对象完成,

我有一个场景,其中1个observable侦听事件,然后触发另一个异步事件,并在运行源observable中的下一项之前等待 第一个可观察对象的触发速度比异步事件快得多,它必须等待异步事件完成,然后才能从第一个可观察对象获取另一项 所以。。基本上,我需要从第一个可观察到的数据建立一个“队列”(因为我不能丢失源1中的数据) 源2应该一次从队列中获取一个项目,运行它,从队列中删除该项目,然后转到队列中的下一个项目 src1- --ev1---ev2---ev3----ev4---ev5--ev6-

Rxjs 如何认识到rx无法解决问题?

reactivex似乎是一种极具吸引力的方法。我有两个不同长度的观测值,并试图将它们重新组合成一个。我花了两天的时间都没有成功,我想知道是否可以从两个观测值到一个观测值进行任何重组?这两个有最后一个的所有数据。 我故意避免附上一个具体的例子。希望得到一些常见的答案(请参阅标题)。根据您的使用情况,有许多运算符用于组合两个(或更多)观察值的输出。以下是一些常见的问题: Zip 组合多个观测值并组合它们之间的输出,在任何源观测值完成时完成: let obs1 = from([0, 1, 2]); l

Rxjs 可从阵列轮询服务器观察到

我试图从一组项目中创建一个可观察的项目,每个项目定期检查服务器更新,然后在得到每个项目想要的结果时发送一个操作 下面的答案很有帮助,但不是我想要的 这是我一直在尝试的另一种方法: export function handleProcessingScenes(action$,store) { return action$.ofType(REQUEST_ALL_SCENES_BY_LOCATION_FULFILLED) .switchMap(({ scenesByLocation })

RxJS 6/tap运算符何时发出值

我一直在想,假设在使用tap操作符之后,它内部的副作用已经完成,这是否安全 我的用例是ngrx 。。。 点击(()=>{ this.store.dispatch(新的SetValue(“helloworld”); } }), switchMap(()=>this.store), 选择(state=>state.value), 点击(状态=>{ 如果(状态===未定义){ 抛出新错误(“找不到值”); } }) SetValue是一个实现ngrx的类 导出类SetValue实现操作{ 只读类型=

Rxjs 为什么bufferTime(500010000)显示我在5000ms后创建的值

代码: 我不明白两件事: 为什么第一个值在5s后返回而不是10s后返回 10秒后(当我在控制台中看到空数组时),我开始单击btn。我这样做了4秒,10秒后仍然有空数组。但如果在控制台中出现空数组后5秒后开始单击,则会得到正确的结果 我认为它的工作原理类似于“每10秒,在接下来的5秒中发出click事件”。但事实并非如此。bufferTime(bufferTimeSpan:number,bufferCreationInterval:number,…) //bufferTimeSpan:填充每个缓

我可以从rxjs中的现有流创建一个全新的流吗

例如,我有一个流,有很多数字,比如1,2,3,4等等。我想要感知这些数据中的每一个,并且每当它是偶数时,我想要在另一个数据流中发出true。保持源数据stram[1,2,3,4]不变。我建议您共享源数据并订阅两次 ... 私有源$=of(1,2,3,4,5,6).pipe(share()); private evenNumberObservable$=此.source$.pipe( 映射(x=>x%2==0), 过滤器(x=>!!x) ); //或 //private evenNumberOb

RxJS按字段分组并返回新的可观测值

我有以下接口和Observable,我想要实现的是在Observable中按机器symbol属性分组,并返回映射的ObservableObservable 我尝试使用RxJS gropBy操作符,但它似乎一个接一个地返回分组数组 machines: Machine[] = [ { amount: 1, id: 1, symbol: "A", price: 1 }, { amount: 1, id: 2, symbol: "A&qu

Rxjs 如何检测一个可观察序列何时出现';经过一段时间后,t产生了一个值

我有一个可观测到的,它将dragover事件节流350毫秒,并返回true,只要这些事件持续出现: Rx.Observable .fromEvent(document, 'dragover') .map(function () { return true; }) .throttle(350) .distinctUntilChanged() 我想知道在过去的350毫秒内是否没有发生dragover事件,并在发生时返回false。我该怎么做呢 我是否需要有一个单独的计时器,并在发生

RxJS-在onNext中发生错误后继续发送通知

我是Rx的新手,如果能在错误处理方面得到一些帮助,我将不胜感激。我有下面的代码,基本上是一个typeahead: var observable = Rx.Observable.fromEvent(searchField, 'keyup') .map(ev => ev.target.value) .filter(text => text.length > 2) .debounce(500 /* ms */) .distinctUntilChange

Rxjs 如何使用@ngrx DB在集合中保存单个项目

我有以下@ngrx效果,当搜索完成时触发。SEARCH\u COMPLETE事件发出产品集合 我希望将集合中的每个产品保存到IndexedDB,而不是将整个集合作为单个值保存。为了实现这一点,我从使用@ngrxDB Observable的产品中创建了一个新的Observable。我不得不使用subscribe调用来使它工作 我的问题是,这样做对吗?还是不使用subscribe方法更好 @Effect() addProductsToDB$: Observable<Action> = t

Rxjs Redux Observable:如何从回调返回操作?

我正在使用WebRTC库,它有一个非常特定的API。peerConnection.setRemoteDescription方法的第二个参数应该是在完成远程描述设置时的回调: 这是我的WebRTC类的包装函数之一: export function setRemoteSdp(peerConnection, sdp, callback) { if (!sdp) return; return peerConnection.setRemoteDescription( new RTCSess

Rxjs switchMap中动态数组的组合测试是不断取消订阅和重新订阅

我至少有两个按钮,我想动态收听点击ListingArray$将发出我需要监听的按钮的数组(ar)。当有人点击我正在收听的其中一个按钮时,我需要控制台记录被点击的按钮,并记录时间间隔中的值 如果ar从[1,2]变为[1],我们需要停止收听对按钮2的点击。因此,需要为2删除DOM click事件,这将触发.finally()操作符。但是对于1,我们应该保持订阅状态,并且.finally()中的代码不应该运行,因为没有任何内容被取消订阅 const obj$ = {}; Rx.Observable.

如何为rxjs-v5设置测试环境?

官方文件只举了一个简短的例子 这个官方的测试设置有很多问题 我需要一个简单的例子,这样我就可以开始为我的rxjs应用程序编写单元测试了。可能重复的

rxjs嵌套可观察并合并结果

我正在尝试嵌套2个可观察的对象,并订阅它们的两个结果,但我不知道怎么做 我想运行第一个可观察的,在第二个可观察的中使用它的结果,在subscribe函数中得到第一个可观察的结果和第二个结果 我已经做了一个非常简单的例子来说明我想要什么 谢谢。有多种方法可以做到这一点。我会选择“联合测试”。 CombineTest接受多个观测值,并且在所有源观测值发出至少一个值时,就开始发出值 let combinedObs = combineLatest([observable1, observable2]);

Rxjs 不执行对BehaviorSubject的共享映射的第二次订阅

当我从BehaviorSubject实例(t)订阅共享映射时,只执行第一次订阅 当原始的BehaviorSubject(obj)发出第二个值时,只打印最新的值,并执行两个订阅 让我们检查一下我的代码 const obj = new Rx.BehaviorSubject(1) obj.subscribe(console.log) const t = obj.map(u => { console.log("mapped") return u * 10 }).share() t.sub

Rxjs GroupBy,减少,以便在ID上旋转

我正在寻找一些帮助来理解这个来自rxjs的示例 我发现我们现在有三个分组的观测值(对于3个ID),它们实际上是发射对象的阵列。对于每个分组的可观察对象,此代码的目的是将其简化为一个数组,其中数组中的第一个条目是键,数组中的后续条目是名称 但是为什么reduce函数是用[“”+group$.key]初始化的,而不仅仅是[group$.key] 为什么每次迭代返回缩减数组时都要使用三点符号[…acc,cur] 但是为什么reduce函数是用[“”+group$.key]初始化的,而不仅仅是[grou

Rxjs 可观察-设置一次轮询返回和另一次轮询开始之间的恒定延迟

我想创建一个基于可观察的轮询器,它在上一个请求返回和下一个请求发出之间等待一定时间 下面是我尝试过的代码,但这会设置请求发出之间的延迟: import {timer} from "rxjs"; this.timer = timer(1, POLLING_INTERVAL) .pipe(concatMap( (_) => getData() )).subscribe((data) => { // do something

Rxjs switchmap是否自动调用订阅?

我试图获得这样一种行为,即如果当前的可观测值发生了变化,那么应该分别调用相应的可观测值 下面的代码按预期工作,但我只需要一些关于此行为的确认,我正在尝试在生产站点上实现它 我知道switchMap从当前订阅中取消订阅,然后重新订阅返回的新订阅。 但是,它是否也调用新的observable subscribed来启动并运行它所拥有的代码,或者这是由管道操作员运行的,或者我是否遗漏了任何重要的概念 请有人澄清一下。 多谢各位 下面是stackblitz代码链接和概述 let a = new Beha

rxjs超时:区分过期时间和源错误

使用RxJS 6.5,我订阅了一个流,我想采取两种不同的行动: -当源代码出现错误时 -另一种情况是,当源发送数据超时时间过长时 这是我目前拥有的 source$.pipe timeoutWith5000,记录'timeout!', catchErrorlog“错误!” 订阅 函数logmsg{ console.logmsg; 回收废品; } 当我的源代码发出时间超过5000毫秒时,我会得到预期的结果:超时 但是,当我的源代码在5000ms之前抛出错误时,两行都会执行。似乎只要源没有发射,即使发

Rxjs 在HttpClient的上下文中可以观察到什么

在使用angular的angularHttpClient时,我知道HttpClient post方法使用cold observable,并将分别进行两次调用以将数据发布到服务器。此外,除非您不订阅post方法,否则它不会将数据发布到服务器 尽管,Rxjscold-observate表示,它将保留所有序列,直到最后,并在订阅时全部启动 它将如何向服务器发出两个单独的调用以发布数据。我不相信这种行为是由使用可观察对象引起的 相反,我怀疑浏览器正在发出飞行前选项请求,作为与服务器的“握手”,以确定是否

Rxjs 初始化实体存储并从RouterQuery中选择项的优雅方式

所以我在和秋田玩,试图建立优雅且有意义的模式和工作流程 我有一种向下钻取的数据集,其中子数据集被缩小。初始数据集不需要FilterSign标准,可以有效地从api加载。子数据集根据在第一个数据集中选择的内容加载。每个数据集都有其entitystore/query等。该结构用于浏览数据库表元数据 表存储->列->列信息 selectedTable$ = this.routerQuery.selectParams('table') .pipe( switchMap(table =

上一页   1   2   3   4    5   6  ... 下一页 最后一页 共 39 页