我开始使用RxJs 5制作功能链,并非常喜欢它。我注意到我经常遇到的一种模式,但无法找到使用RxJs方法解决它的方法
我使用值获得一些异步数据,然后将它们与值本身合并
让我用代码向您展示:
Rx.Observable.fromPromise(somePromise) // doesn't really matter
.flatMap(value => { // this is the original value I have
const promise = aFunctio
标签: Rxjs
redux-observable
我正在尝试使用以下方法将我的应用程序与应用程序内购买连接:
我有一部史诗,我想在成功的时候释放成功,失败的时候释放失败。大概是这样的:
import 'rxjs';
import { InAppUtils } from 'NativeModules';
import * as packagesActions from '../ducks/packages';
import * as subscriptionActions from '../ducks/subscription';
expor
标签: Rxjs
marblejasmine-marbles
据
那么我如何在第20帧上表示“发射a、b和c,然后在第40帧上完成”
Ie如何阻止同步组本身占用帧?在他的评论中回答了这个问题
没有办法做到这一点-同步组将始终占用额外的帧,即使所有成员都出现在开始括号的帧中。您不能;对此您无能为力。您在问题中包含的文档中的示例描述了TestScheduler的行为。以防万一,这可能会有所帮助另外,还有一个提供此功能的替代库:
'--(abc)-|': on frame 20, emit a, b, and c, then on frame 80 comple
我一直在研究pipemethod源代码,但找不到任何关于触发作为参数的运算符的线索。
根据我在源代码中看到的,首先,pipe方法将操作作为参数,它是OperatorFunction类型,而不仅仅是操作符。然后,它调用pipeFromArray函数,将操作传递给它。在pipeFromArray函数中,它使用reduce方法迭代操作。这里是一个棘手的部分:我研究了map操作符,例如,pipe作为参数的操作(在本例中为mapOperation函数),除了返回一个新的可观察对象之外,什么也不做,该对象将
我想我理解了Rxjs中可观测值的概念,但我正在努力将理论转化为代码
我有一个角度分量,比如说C。我希望它应该显示特定的HTML组件,这取决于用户是否登录。为此,我使用的代码与
<ng-container *ngIf = "userNotloggedIn">
...
}
然后在组件中,我订阅可观察到的,如下所示:
ngOnInit(){
this.userloggedIn = false;
this.userManagementService.userSigned
我想知道为什么下面的代码不能编译
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拖放示例:
const drag$ = mousedown$.pipe(
switchMap(
(start) => {
return mousemove$.pipe(map(move => {
move.preventDefault();
return {
left: move.clientX - start.offsetX,
top: move.clientY
我正在努力使我认为是一个
我让别人分享了他们的代码,但我不知道如何将其转换为自定义操作(没有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 observable来处理redux异步操作
我需要通过id清除模块状态
这是我的ClearModuleByDepic:
const clearModuleByIdEpic = (action$: ActionsObservable<any>) => {
return action$.ofType(t.CLEAR_MODULE_BY_ID)
.map((action: IActionPayload<any>): string =>
标签: Rxjs
rxjs5redux-observable
我有这段代码,但无法理解为什么我没有进入map函数(在这里我有一条注释“我永远不会进入代码的这一部分”):
有人能在这里说点什么吗?
为什么使用subscribe时它工作,而在可观察对象上使用map时它不工作?
难道map不应该在每次可观察到的触发时被调用吗
谢谢,
Jim.在您订阅您的可观测对象之前,它是冷的,不会发出值。订阅后,将调用映射。这是rxjs的一项功能,旨在避免不进行更改的操作(=没有用户使用这些值)。有很多关于这个主题的博客文章,在谷歌上搜索“冷的还是热的观测”,但在redux
标签: Rxjs
redux-observable
我有一个可能存在也可能不存在的对象。我正在使用Observable.if来确定基于其存在的操作
但是,即使对象未定义,Observable.if的else部分似乎仍在运行。我收到以下错误:TypeError:无法读取未定义的属性“genesisHash”
console.log("jjjjjjjjjjjjjjjj: ", t); // prints out jjjjjjjjjjjjjjjj: undefined
return Observable.if(
() => !t
在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>
假设有一个像上面这样的简单代码。我尝试的是在源流发出某些信息时记录值,但显然,我记录的值与源流的值无关。因此我考虑使用mapTo操作符,如下所示:
function c() {
return Math.random();
}
source$.pipe(
map(a => c())
).subscribe(v => console.log(v));
但正如你可能猜到的,值总是一样的。更准确地说,它保持为第一个值,这不是我想要的
所以我的观点是,我希
标签: Rxjs
redux-observable
我有一个组件,可以在其中分派多个操作:
dispatch(action1());
dispatch(action2());
我有一个epic,它监听这两个动作,并为每个动作调用ajax:
export const fetchObservable = action$ =>
action$.ofType(...actions) // wait for either action
.mergeMap(({ url, method, body, success, error, res
我是Angular 6.X和rxjs的新手。我正在尝试为单击操作实现可观察。它通过RestApi提取数据,但在数据['list']处低于异常。映射,我尝试了不同的方法,但都没有成功
get(): Observable<ProgramOwnerVulnerability[]> {
//explicitly do not type this get, due to list structure returned
return this.http
标签: Rxjs
redux-observable
我正在使用redux observable epic,使用搜索端点从GitHub上的特定组织获取回购。我的主要问题是我需要按“观察者”进行排序,所以我需要所有的回购协议,但GitHub只允许每页最多返回100个。响应包括“total_count”,我可以用它来计算我还需要发出多少请求(共页)。以下是我目前的代码:
export const fetchRepos = actions$ =>
actions$.pipe(
ofType(FETCH_REPOS),
switc
我正在使用以下代码发出get请求:
makeGetReq$(url:string):Observable{
let getReqObservable;
getReqObservable = this.httpClient.get(url) //code for making get request
return getReqObservable
}
问题是有时我的后端可能返回状态代码为200的{error:true,message
在Rx.Net的所有文献中,都有关于可观测的温度的参考文献
有冷观测(类似于Observable.Interval()和类似的工厂方法创建的观测),每次创建新订阅时都会产生副作用
在光谱的另一端,有热观测(如主题),它们将在新订阅到来时提供新的订阅
还有热观测,如RefCount()返回的观测,它将在每次创建一个订阅时执行初始化,但前提是没有其他活动订阅。Dave Sexton解释了这些热观测的行为:
或者,您可以调用Publish-then-RefCount来获取在多个连续观察者之间共享的IO
我试图找到一个行为类似于concatMap的操作符,但在两者之间删除所有内容。例如,concatMap执行以下操作:
下一个
开始处理
下一个b
下一个c
处理完一个
开始处理b
完成处理b
开始处理c
完成处理c
取而代之的是,我正在寻找一种机制,它将丢弃b,因为c已经出现了:
下一个
开始处理
下一个b
下一个c
处理完一个
(跳过b)
开始处理c
完成处理c
有关更详细的示例,请参见此要点:在a上执行mergeMap之后,您可以尝试在b上使用race方法
我看起来像这样:
a.pi
我有一个函数,它检查网格是否已加载,如果未加载,它将触发加载。但目前,它会为相同的加载的值触发几次,因此它会多次调用相关操作。我的印象是商店选择器在默认情况下只发出不同的(更改的)值
我的职能
private gridLoaded(filters: FilteredListingInput): Observable<boolean> {
return this.settings.states.Loaded.pipe(
tap(loaded => {
标签: Rxjs
redux-observable
我想对多个异步操作进行排序,当它们全部完成时,发出最终操作:
const initializeEpic = (action$, state$, dependencies) =>
action$.ofType("INITIALIZE_APP_REQUEST").pipe(
mergeMap((action) =>
[
getUserRequest(),
getCoreDat
我试图找到处理API的最佳方法,当一些组件必须调用多个函数,但需要一步一步地等待时
我所做的一切都很好。但我不知道这样做是否正确。
有谁能指出或举个简单的例子来说明更好的解决方案吗
多谢各位
someService1().subscribe(res => {
// result
},(error =>{
// handle it
},(()=> {
someService2().subscribe(res2=>{
///
})
}));
您可以组合多个观察值以获得单个
我有一个流,它是由RxBehaviorSubject的next()方法触发的。如何在订阅服务器之间共享pipedData$流
我尝试在这里使用share操作符,以避免map操作符中的大量重新计算,但没有运气-每个订阅者都会重新计算
还可以从源获取订阅者的数量吗
import { interval, BehaviorSubject } from 'rxjs';
import { take, map, tap, share, debounceTime } from 'rxjs/operators'
我正在尝试测试NestJS基于Axios的内置HttpService。不过,我在测试错误/异常状态时遇到了问题。在我的测试套件中,我有:
let client: SomeClearingFirmClient;
const mockConfigService = {
get: jest.fn((type) => {
switch(type) {
case 'someApiBaseUrl': {
return 'http://exa
我一直在玩的是将CombineTest与concatAll()一起使用,但它们仍然被同时调用。我可以循环调用每一个,但我总是想知道RXJS工作流中是否有更好的方法
combineLatest(arrayOfApiObservables).pipe(concatAll()).subscribe();
这里的问题是您使用了combinelateest操作符,该操作符只有在所有可观察对象发出后才会发出值(例如,它同时调用所有对象)
在此之后,concatAll不能影响arrayofapiobserv
我正在努力实现下一个目标:
private beginTransaction(): Observable() {
..
}
private test(): void {
this.beginTransaction().subscribe((): void => {
this.commitTransaction();
});
this.beginTransaction().subscribe((): void => {
this.commitTra
这里有一个相当复杂的示例:
主要内容:
可观察到:
public runInstructionAndGetResult(): Observable<string> {
return this.runAnInstruction()
.flatMap((data) => {
console.info("flatMap of runAnInstruction:", data);
return this.getIn
我想测试一个可观测的发射的每一个值,如果它符合某些标准,那么就把结果弄错,否则就把这个值传下去。有操作员吗?我不知道这是否是正确答案,但对我有效的是可以观察到的。创建
Observable.create((observer: Observer) =>
sourceObservable.subscribe((val: Value) => {
if(condition)
observer.next(val);
else
observer.er
我在RXJS4中遇到了这个方法,它似乎非常有用,但是我似乎在RXJS5中找不到它
有人知道RxJS 5中的任何东西是否有类似的行为吗?您可以像那样为它添加一个多边形填充
函数mergeDelayError(…源:数组){
const final=新主题();
const catching=sources.map(obs=>obs.pipe(
捕捉错误(e=>{
如果(!final.hasError){
最终错误(e);
}
返回空;
}),
));
返回concat(合并(…捕获),最终);
我有一个场景,其中1个observable侦听事件,然后触发另一个异步事件,并在运行源observable中的下一项之前等待
第一个可观察对象的触发速度比异步事件快得多,它必须等待异步事件完成,然后才能从第一个可观察对象获取另一项
所以。。基本上,我需要从第一个可观察到的数据建立一个“队列”(因为我不能丢失源1中的数据)
源2应该一次从队列中获取一个项目,运行它,从队列中删除该项目,然后转到队列中的下一个项目
src1- --ev1---ev2---ev3----ev4---ev5--ev6-
reactivex似乎是一种极具吸引力的方法。我有两个不同长度的观测值,并试图将它们重新组合成一个。我花了两天的时间都没有成功,我想知道是否可以从两个观测值到一个观测值进行任何重组?这两个有最后一个的所有数据。
我故意避免附上一个具体的例子。希望得到一些常见的答案(请参阅标题)。根据您的使用情况,有许多运算符用于组合两个(或更多)观察值的输出。以下是一些常见的问题:
Zip
组合多个观测值并组合它们之间的输出,在任何源观测值完成时完成:
let obs1 = from([0, 1, 2]);
l
我试图从一组项目中创建一个可观察的项目,每个项目定期检查服务器更新,然后在得到每个项目想要的结果时发送一个操作
下面的答案很有帮助,但不是我想要的
这是我一直在尝试的另一种方法:
export function handleProcessingScenes(action$,store) {
return action$.ofType(REQUEST_ALL_SCENES_BY_LOCATION_FULFILLED)
.switchMap(({ scenesByLocation })
标签: Rxjs
ngrxrxjs5rxjs6ngrx-store
我一直在想,假设在使用tap操作符之后,它内部的副作用已经完成,这是否安全
我的用例是ngrx
。。。
点击(()=>{
this.store.dispatch(新的SetValue(“helloworld”);
}
}),
switchMap(()=>this.store),
选择(state=>state.value),
点击(状态=>{
如果(状态===未定义){
抛出新错误(“找不到值”);
}
})
SetValue是一个实现ngrx的类
导出类SetValue实现操作{
只读类型=
代码:
我不明白两件事:
为什么第一个值在5s后返回而不是10s后返回
10秒后(当我在控制台中看到空数组时),我开始单击btn。我这样做了4秒,10秒后仍然有空数组。但如果在控制台中出现空数组后5秒后开始单击,则会得到正确的结果
我认为它的工作原理类似于“每10秒,在接下来的5秒中发出click事件”。但事实并非如此。bufferTime(bufferTimeSpan:number,bufferCreationInterval:number,…)
//bufferTimeSpan:填充每个缓
标签: Rxjs
rxjs-observables
例如,我有一个流,有很多数字,比如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
rxjs5rxjs6rxjs-observables
我有以下接口和Observable,我想要实现的是在Observable中按机器symbol属性分组,并返回映射的ObservableObservable
我尝试使用RxJS gropBy操作符,但它似乎一个接一个地返回分组数组
machines: Machine[] = [
{ amount: 1, id: 1, symbol: "A", price: 1 },
{ amount: 1, id: 2, symbol: "A&qu
我有一个可观测到的,它将dragover事件节流350毫秒,并返回true,只要这些事件持续出现:
Rx.Observable
.fromEvent(document, 'dragover')
.map(function () { return true; })
.throttle(350)
.distinctUntilChanged()
我想知道在过去的350毫秒内是否没有发生dragover事件,并在发生时返回false。我该怎么做呢
我是否需要有一个单独的计时器,并在发生
标签: Rxjs
reactive-programmingreactive-extensions-js
我是Rx的新手,如果能在错误处理方面得到一些帮助,我将不胜感激。我有下面的代码,基本上是一个typeahead:
var observable = Rx.Observable.fromEvent(searchField, 'keyup')
.map(ev => ev.target.value)
.filter(text => text.length > 2)
.debounce(500 /* ms */)
.distinctUntilChange
标签: Rxjs
observablengrxngrx-effects
我有以下@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
我至少有两个按钮,我想动态收听点击ListingArray$将发出我需要监听的按钮的数组(ar)。当有人点击我正在收听的其中一个按钮时,我需要控制台记录被点击的按钮,并记录时间间隔中的值
如果ar从[1,2]变为[1],我们需要停止收听对按钮2的点击。因此,需要为2删除DOM click事件,这将触发.finally()操作符。但是对于1,我们应该保持订阅状态,并且.finally()中的代码不应该运行,因为没有任何内容被取消订阅
const obj$ = {};
Rx.Observable.
官方文件只举了一个简短的例子
这个官方的测试设置有很多问题
我需要一个简单的例子,这样我就可以开始为我的rxjs应用程序编写单元测试了。可能重复的
我正在尝试嵌套2个可观察的对象,并订阅它们的两个结果,但我不知道怎么做
我想运行第一个可观察的,在第二个可观察的中使用它的结果,在subscribe函数中得到第一个可观察的结果和第二个结果
我已经做了一个非常简单的例子来说明我想要什么
谢谢。有多种方法可以做到这一点。我会选择“联合测试”。
CombineTest接受多个观测值,并且在所有源观测值发出至少一个值时,就开始发出值
let combinedObs = combineLatest([observable1, observable2]);
当我从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的示例
我发现我们现在有三个分组的观测值(对于3个ID),它们实际上是发射对象的阵列。对于每个分组的可观察对象,此代码的目的是将其简化为一个数组,其中数组中的第一个条目是键,数组中的后续条目是名称
但是为什么reduce函数是用[“”+group$.key]初始化的,而不仅仅是[group$.key]
为什么每次迭代返回缩减数组时都要使用三点符号[…acc,cur]
但是为什么reduce函数是用[“”+group$.key]初始化的,而不仅仅是[grou
我想创建一个基于可观察的轮询器,它在上一个请求返回和下一个请求发出之间等待一定时间
下面是我尝试过的代码,但这会设置请求发出之间的延迟:
import {timer} from "rxjs";
this.timer = timer(1, POLLING_INTERVAL)
.pipe(concatMap(
(_) => getData()
)).subscribe((data) => {
// do something
我试图获得这样一种行为,即如果当前的可观测值发生了变化,那么应该分别调用相应的可观测值
下面的代码按预期工作,但我只需要一些关于此行为的确认,我正在尝试在生产站点上实现它
我知道switchMap从当前订阅中取消订阅,然后重新订阅返回的新订阅。
但是,它是否也调用新的observable subscribed来启动并运行它所拥有的代码,或者这是由管道操作员运行的,或者我是否遗漏了任何重要的概念
请有人澄清一下。
多谢各位
下面是stackblitz代码链接和概述
let a = new Beha
使用RxJS 6.5,我订阅了一个流,我想采取两种不同的行动:
-当源代码出现错误时
-另一种情况是,当源发送数据超时时间过长时
这是我目前拥有的
source$.pipe
timeoutWith5000,记录'timeout!',
catchErrorlog“错误!”
订阅
函数logmsg{
console.logmsg;
回收废品;
}
当我的源代码发出时间超过5000毫秒时,我会得到预期的结果:超时
但是,当我的源代码在5000ms之前抛出错误时,两行都会执行。似乎只要源没有发射,即使发
标签: Rxjs
angular-httpclient
在使用angular的angularHttpClient时,我知道HttpClient post方法使用cold observable,并将分别进行两次调用以将数据发布到服务器。此外,除非您不订阅post方法,否则它不会将数据发布到服务器
尽管,Rxjscold-observate表示,它将保留所有序列,直到最后,并在订阅时全部启动
它将如何向服务器发出两个单独的调用以发布数据。我不相信这种行为是由使用可观察对象引起的
相反,我怀疑浏览器正在发出飞行前选项请求,作为与服务器的“握手”,以确定是否
标签: Rxjs
angular-akitaakita
所以我在和秋田玩,试图建立优雅且有意义的模式和工作流程
我有一种向下钻取的数据集,其中子数据集被缩小。初始数据集不需要FilterSign标准,可以有效地从api加载。子数据集根据在第一个数据集中选择的内容加载。每个数据集都有其entitystore/query等。该结构用于浏览数据库表元数据
表存储->列->列信息
selectedTable$ = this.routerQuery.selectParams('table')
.pipe(
switchMap(table =
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 39 页