我有一个类,在实例化时会进行一些web服务调用,伪代码如下:
Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'))
.flatMap(function () {
return Rx.Observable.fromPromise(jQuery.getJSON('https://api.github.com/users'));
});
同一个类正在侦听onclick事件
即使触发了此操作,如
在开发angular/cli应用程序时,我注意到无法显式导入Observable的运算符,如:
import { Observable } from 'rxjs/Observable';
// import 'rxjs/add/operator/zip';
// import 'rxjs/add/operator/mergeMap';
实际上并不阻止代码编译。以前是这样的,但我不确定是什么导致了这种变化,现在评论这些导入并没有停止编译
这是某个地方的配置还是我的代码的不良状况?我仔细检查了一下
我想让我的“可观察者”立即开火,并且每秒钟再开火一次。不会立即开火。我找到了建议使用startWith,它确实会立即触发,但随后我得到了一个重复的第一个条目
Rx.Observable.interval(1000).take(4).startWith(0).subscribe(onNext);
如何使间隔立即开火,但不复制第一个条目 在RxJs 6之前:
可观察。计时器(0,1000)将立即启动
RxJs 6+
import {timer} from 'rxjs/observable/t
几天来,我一直在尝试使用.next方法添加数据。
在尝试这一点时:
messages: Observable<Message[]>;
const newMessage = new Message(objMessage);
messages.next(newMessage);
消息:可观察;
const newMessage=新消息(objMessage);
messages.next(newMessage);
我有一个错误:
Property 'next' does not ex
标签: Rxjs
visual-studio-app-center
我有一个react本机应用程序,我正试图用VS AppCenter构建它,我很难弄清楚构建错误是什么。查看日志,它似乎在步骤6生成源代码映射
该错误是否为AssignmentExpression左侧的rxjs error属性,预期节点的类型为[“LVal”],但得到的却是“ConditionalExpression”,这是导致生成失败的原因吗?如果是这样的话,为什么它可以在本地运行和构建呢
##[section]Starting: Generate source map
============
标签: Rxjs
redux-observable
我有一个场景,我需要向端点发出请求,然后基于返回,我需要生成多个项或只是传递一个项(具体地说,我使用redux observable,并尝试基于api返回生成多个操作,如果有关系的话)
下面我有一个简化的例子,但感觉不像是惯用的rx,只是感觉很奇怪。在本例中,如果值为偶数,我希望生成两个项目,但如果为奇数,则只需传递值即可。实现这一目标的“正确”方式是什么
test('url and response can be flatMap-ed into multiple objects bas
标签: Rxjs
redux-observable
我有一部史诗,将动作导入一个代表WebSocket的主题,如下所示:
const webSocketSendEpic = (action$, state$, { socket }) =>
action$.ofType('SEND_MESSAGE')
.pluck('payload')
.subscribe(socket)
但是,这不是真正的epic,因为它返回的是订阅,而不是可观察的。我可以用一个块包围它并返回空的来规避这个问题,但这感觉不正确。实现这一点的正确方法是
我的应用程序需要对一个API进行多个单独的数据调用,但出于性能原因,我不想一次将它们全部转储。是否有一个rxjs操作符允许我一次只运行几个,然后将它们的所有结果合并为一个
因此,如果我需要从ABC获得结果…XYZ,我只需要两个请求激活一次,它将订阅a和B。然后,如果B完成,它将订阅C。然后a完成,它订阅D。依此类推,直到全部完成,但只有两个订阅处于活动状态。是的,有一个选项可以这样做。merge的最后一个参数必须是(并发请求的)数量
文件摘录:
const timer1=间隔(1000)。管道(
我是RxJS新手,所以我甚至不确定我是否给了一个问题一个合适的标题
为了解释我试图实现的目标:我有一个API端点,它生成一个带有ID的对象数组。然后,我将在多次调用中使用数组中获得的每个id调用另一个API端点。
我希望第一个API的订户获得的数据已经包括第二个API调用的响应
闪电战:
目前,thatThing的值是可观察的,我希望它们是接收到的对象
编辑
我成功地实现了我想要的,但在我看来这看起来很糟糕——因为解决方案使用了Promise类来解决这个问题
我想知道RxJS是否有同样的方法:
我是rxjs的新手,我正试图弄清楚下面的代码中发生了什么
事实上,为了说明这个想法,我准备了两个简单的承诺(resolvePromise和rejectPromise),一个解决承诺,另一个拒绝。
“Subject”实例用于触发这两个承诺(通过mergeMap和forkJoin管道)。最后,添加了两条单独的指令(source$.next('xxx'),希望触发订阅两次
但最后,只有第一个“source$.next('1')”触发订阅,而下一个“source$.next('2')”似乎什么也不做
我
我有一个应用程序,我需要检查上次查看的课程是否大于1。如果是,我必须询问用户是否希望导航到该课程。我在解析器中执行此操作,因此在他们回答问题之前,我的页面不会呈现。我似乎不知道如何使用xml从服务调用返回一个可观察的。如果他们还没有开始,它在第一课,它返回的xml很好,解析工作,他们进入第一页。但是,当我试图在dialogs.confirm中返回http请求时,我没有得到数据的正确解析。我尝试在对话框中返回of(),我尝试在确认的if-then中返回数据,我尝试在if/then中返回(数据)。似
我与操作员withLatestFrom发生意外行为
输出
map a
a
map a <== why a is mapped again ?
map b
b
我发现操作员share()允许多个订户
const a=createA.pipe(
map(()=>console.log('map a')),
股份()
)
这里的问题不在于withLatestFrom(),而在于订阅的工作方式。可观察对象是惰性的,在订阅之前不会运行。每个新订阅将再次运行可观察到的
const stream$ =
我有这样一个UI:
我能去的地方
在搜索框中输入内容
将用户从表拖动到图表
所需的逻辑是:
最初,图表显示了所有用户的一些子集(例如,前10个)
当用户被拖到图表上时,他们被添加到已经存在的用户中
当应用过滤器时,所有用户都将从图表中删除,然后重新填充匹配用户的子集
我试图用RxJs实现这样的逻辑。
我有filteredUsers$和addedUsers$流,它们生成与过滤器匹配的用户并相应地拖动用户
我需要以这样的方式组合它们:
Observable
标签: Rxjs
redux-observable
我正在使用react observable来协调应用程序中的AJAX调用。我连接了react-redux加载栏,在AJAX调用开始时显示加载栏,在调用结束时隐藏加载栏。它能工作,但感觉不太“干净”
有没有更好的方法来利用RXJS或redux observable使其更干净
import Rx from "rxjs";
import {combineEpics} from "redux-observable";
import client from "../../integration/rest/
标签: Rxjs
reactive-programmingrxjs5
我有一个用例,当另一个通知程序Observable发出时,我需要一个Observable跳过它的下一个发射
source: |---X---X---X---X---X---X---X---X---X---X--|>
notifier: |-------------X---------X----------X-------|>
result: |---X---X---X-------X---X-------X-------X--|>
基本上,我需要一个名为skip
如果您使用的函数返回不同的可观察值,如:
const load = () => {
if (!activated) {
return of(null);
} else {
return of(123);
}
}
如果使用combinelatetest,即使将activated更改为true,此时返回的值也将始终保持不变
combineLatest(load(), b)
.pipe(map(([num, str]) => `${num}:${str}`
我对rxJs的要求是,
订阅数据后如何重置CombineTest
订阅结果后,订阅再次只需调用所有可观察的get modified(所有combinelatest参数)。并且不适用于任何一个修改的参数
Observable.combineLatest(
this.one$,
this.two$,
this.three$,
this.four$,
this.five$
).subscribe(data => {
我们有一个执行http请求的请求服务。
所有请求都实现IRequest接口,该接口包含http方法和一个执行函数,该函数依次返回另一个可观察的对象
RequestService有一个重载,它接受一个源可观察对象,还有一个requestfactory,它根据源可观察对象的值返回一个IRequest实例
export interface IRequest<TResponse> {
__method: string;
execute(): Observable<TRe
我正在尝试实现注销功能如果用户在系统上已处于活动状态1小时,我必须注销用户,我正在使用onInit()上Rxjs的“interval”方法。然而,这是打印值的两倍
我尝试检查是否调用了此方法两次,但只调用了一次
const source = interval(6000);
this.activityTimerSubscription = source.subscribe(val => {
console.log(val);
if (val > 30) {
//this
情况如下:
有一段文字。每次文本更改,我都会提交一个请求。
答复文本分为几个部分。
然后我再次将每个部分发送到服务器
例如:
请求-响应
1234567=>[1]、[2]、[3,4]、[5,6,7]
请求队列
[1]=>[2]=>[3,4]=>[5,6,7]
更改文本
请求-响应
12334567=>[1]、[2]、[3,3,4]、[5,6,7]
在这里,我想比较上一个答案和新的,只发送
[3,3,4]
我决定将其全部作为流,并最终处理RxJS。
实际上,在寻找RxJS方式时,我会在这里提出一个
我正在通过NestJS的内置HttpService向第三方API发出请求。我试图模拟这样一个场景:对这个api的一个端点的初始调用可能会在第一次尝试时返回一个空数组。我想使用RxJS的retryWhen在延迟1秒后再次点击api。我目前无法让单元测试模拟第二个响应,但是:
it('Retries view account status if needed', (done) => {
jest.spyOn(httpService, 'post')
.mockReturnV
我想在原始可观测对象完成时发出一个值,比如下面,使用虚拟操作符mapComplete:
让arr=['a','b','c'];
从(arr)
.pipe(映射完成(()=>'myValue'))
.pipe(map((v)=>`进一步处理:${v}`)
.subscribe(console.log)
//进一步处理:myValue
我尝试了以下方法,但似乎不合适:
1.
from(arr)
.管道(toArray())
.pipe(映射(()=>'myValue'))
.pipe(map((v
标签: Rxjs
angularfire2angular2-observables
我对这有点陌生,所以请容忍我。我会尽力解释的。我正在使用AngularFire2和。在我的例子中,我试图获取与帐户相关联的事务列表(请参见下面的示例数据)
样本数据
accounts: {
account1: {
name: "Account 1",
transactions: {
transaction1: {
date: somedate
},
transaction2: {
date: somedate
标签: Rxjs
observableangular2-observables
我有这样的数据结构:
[{
id : 1,
name : "Item 1",
subItems : [{
id : 1,
name : "SubItem 1"
},{
id : 2,
name : "SubItem 2"
}
]
}, {
id : 2,
name : "Item 2",
subItems : [{
我有一个角度2路由器防护装置,其canActivate方法定义如下:
canActivate() {
return this.sessionSigninService.isAuthenticated()
.filter(isAuthenticated => isAuthenticated !== null)
.map(isAuthenticated => {
if (isAuthenticated) {
return
这是取消订阅的正确格式吗?使用bindNodeCallback创建的观察对象将完成或出错,因此您不需要显式取消订阅。订阅将自动取消订阅
但是,如果您确实想明确取消订阅,您可以;像这样:
const subscription=source.subscripte({
下一步:([res,body])=>{},
错误:()=>{},
完成:()=>订阅。取消订阅()
});
我在Rxjs 5上尝试过,使用arrow函数会抛出一个错误,函数unsubscribe未定义,这应该是不可能的,除非同步调用回调
我想创建一个可观察的链,它将能够在下一个事件之前向每个扩展事件添加http数据,但我不知道如何添加
实际测试:
Observable.of('')
.expand(n => n.length < 15 ? Observable.of(n + 'e') : Observable.empty())
.mergeMap(n => Observable.of(n + 'm'))
.subscribe(v => conso
标签: Rxjs
reactive-extensions-js
这里有一个初学者问题:在Ionic2组件中,我有两个不同的服务调用,使用可观察对象:
getTimelineEvents() {
this.receiptsEventsRequestState = RequestState.Pending;
this.chargesEventsRequestState = RequestState.Pending;
this.miscService.getCustomerReceiptsEvents()
.subscri
我有一个函数,它有时返回一个封装在可观察值中的值,有时返回一个普通值。有没有一种优雅的方式来获取价值?目前我正在使用此策略:
let mayBeAnObservable = getData();
let resultObservable = mayBeAnObservable instanceof Observable ? mayBeAnObservable : Observable.of(mayBeAnObservable)
resultObservable.subscribe(resultV
我想加入两个观测值:
var goodObservable = Rx.Observable.create( function(observer){
observer.next('something');
observer.complete();
});
var badObservable = Rx.Observable.create( function(observer){
observer.complete();
});
var forkJoi
我想创建一个可观察对象,它订阅另一个可观察对象,并在成功时生成true,在错误时生成false
这是我的解决方案:
new Observable ((observer: Observer<boolean>) => {
obs().subscribe (() => {
observer.next (true);
}, error => {
observer.next (false);
})
});
但这只会留下打字脚本错误:
错误TS23
标签: Rxjs
redux-observable
我想这是一个非常常见的用例,但找不到一个能为我清晰展示它的例子
const openTriviaTokenEpic = (action$, store) =>
action$
.ofType(OT_GET_TOKEN)
.mergeMap(action =>
Observable.from(fetch(OPEN_TRIVIA_API + "api_token.php?command=request"))
.flatMap(res =&g
我正在将数据批量加载到数据库中,并使用RxJS控制管道
let event = 0;
parseStreamOfIndividualObjectsToInsert().pipe(
bufferCount(100), // batch the inserts in groups of 100
flatMap(batch => batchInsert(batch)
// I want to go on only when all batch inserts are complete
标签: Rxjs
angularfire2rxjs6
我正试图将angularfire2的承诺映射到类型化的可观测数据中。这是我的班级:
export class RestService<T extends Entity> {
constructor(
protected afAuth: AngularFireAuth,
protected store: AngularFirestore,
protected readonly collectionName: string) {
类Subject有两个属性closed和isStopped。我知道closed可以用来检查主题是否仍然可以订阅,但是isStopped到底应该用于什么
我问这个问题是因为我试图找到一种方法来知道一个行为主体的下一个操作何时完成。我可以用它吗?还是用它做别的 通过每次操作后的结果值可以看出关闭和关闭的比较行为:
关于错误:
关闭:错误
isStopped:true
如果主题已完成:
关闭:错误
isStopped:true
如果取消订阅:
关闭:正确
isStopped:true
标签: Rxjs
redux-observable
我是RxJS的新手,如果没有什么意义,我很抱歉
假设我想要一个可重用的epic,用于从应用程序加载epic获取将由操作调用的用户
过于简单的例子:
const getUserEpic=action$=>
动作$.pipe(
ofType(获取用户请求),
switchMap(action=>from(service.fetchUser(action.userId).pipe(
映射到({type:GET_USER_SUCCESS})))
),
);
const appLoadEpic=操作$=>
标签: Rxjs
angular7ngrxngrx-storengrx-effects
当前使用一个操作的功能:
@Effect()
addAssignment$ = this.actions$.pipe(
ofType(assignmentActions.AssignmentsActionTypes.AddAssignment),
exhaustMap((action) => {
return this.assignmentDataService.addOrUpdateAssignment([action.payload]).pipe(
我有一个epic与concat操作员配合得很好。Webstorm开始说我使用它的方式不推荐它。说
不推荐使用的导出函数concat(v1:{type:string}[],调度程序:SchedulerLike):可观察>
使用scheduled和concatAll(例如scheduled([o1,o2,o3],scheduler)。管道(concatAll())
不知道怎么重写这段代码
const epic = action$ => action$.pipe(
ofType(TYPE),
如何正确发送RxJS请求,当有4个不同的API端点时,我需要请求每个端点,直到上一个端点不返回数据
模式是:
Request 1 -> Return Void
Request 2 -> Returned data, stop working and return data
Request 3 -> Will fail
req1$ = of(response);
req2$ = of(response);
req1$.pipe( flatMap((result) =>
标签: Rxjs
rxjs6rxjs-pipeable-operators
我有多个在页面生命周期内发出值的观察值。例如:
chartData$: Observable;
tableData$: Observable;
filterData$: Observable;
在任何时候,用户都可以单击“下载”按钮,并获得JSON,该JSON结合了最近从每个观察值发出的值:
downloadButtonClicked$.pipe(
combine chartData$, tableData$ and filterData$ // <- how do I g
标签: Rxjs
rxjs-pipeable-operators
我有一个fromEvent附加到input keydown事件。这样我就可以收听KeyEvents
在管道内部,我使用扫描操作符,因此我可以累积用户引入的最新3个键
我检查了扫描,累加器的长度,所以如果它已经是三,我会清理它(手动复位)
我需要一种方法,当用户输入时,在接下来的3000毫秒内,他可以一直输入,直到达到限制(3个键),但如果用户速度低于时间限制(3秒),下次他输入时,我将手动重置累加器
fromEvent(myInput.nativeElement, 'keydown').pi
标签: Rxjs
observableredux-observable
在数据库中,我有19个用户。
在我的API中,一次调用只能得到5个结果
如果我想得到所有这些,我需要做4次请求,每次获得5个用户。使用startquery,我将更改希望新用户获得的位置
我正试图在RxJS和redux observable中实现这一点。
我有一些想法,但也许我的方法是强制性的,而RxJS是相反的意识形态
//从API和'pipe'获取用户,他们帮助我查看实际数据并计算数组长度
函数getUsers(位置=0){
返回ajax.getJSON(`${API}/users?\u s
标签: Rxjs
reactive-extensions-js
我有一个可观察到的热点(本例中的主题):
var subject=new Rx.subject();
我想创建另一个可观察对象,即每次创建新订阅时,都会立即激发生成的最后一个值
所以在伪代码中:
var myObservableWithLastValue=subject.publishLast();
主题.onNext(3);
myObservableWithLastValue.subscribe(函数(x){
console.log(x);//应该写入3
});
myObservableWi
标签: Rxjs
system.reactivegang-of-four
四个观察者模式和四个观察者模式有何不同?有一些重叠:
GoF主题:订阅处理程序、取消订阅处理程序、向处理程序发送通知
Rx Observable:T型订阅处理程序(通过订阅隐式取消订阅)
Rx观察者:接收类型T(或错误或结束)通知的处理程序
接收对象:某类型T的可观察+观察者
因此,它们支持相同的基本操作。我假设Rx团队根据GoF使用情况选择他们的名字。不过,Rx团队显然希望将“主体”的功能分为发送者和接收者:Rx的重点是可观察的,而不是主体。有一些重叠:
GoF主题:订阅处理程序、取消订
我如何使用RxJS实现以下内容
a-b-c-d-e-f-g-h
ab---cd---ef---gh
或
a-b-c-d-e-f-g-h
abc---def---gh
我有一个数组,需要按指定的分区进行拆分,并以指定的间隔发出值。注意,您无法从“a-b-”中获取“ab-”,因为您必须等待“b”,因此严格来说,大理石图将是
a-b-c-d-e-f-g-h-|
-(ab)---(cd)---(ef)---(gh|)
or
a-b-c-d-e-f-g-h-|
--(abc)----(def)----
标签: Rxjs
redux-sagaredux-observable
如果epic收到新动作,停止处理旧动作。
有一点背景:我有一部史诗,它会发出一些延迟动作。
如果epic收到新动作,我需要取消它们
Redux传奇效果完全符合我的要求:
这正是操作员的工作:
将每个源值投影到合并到输出中的可观察值
可观察,仅从最近投影的可观察发射值
在本例中,您可以看到,在新的点击到达后,先前的间隔不再处理:
const clicks=Rx.Observable.fromEvent(文档“click”);
const result=点击开关映射((ev)=>Rx.可观察间隔(1
标签: Rxjs
rxjs-lettable-operators
我习惯于使用旧的rxjs语法,其中所有方法调用都是链接的,我可以集中导入所有运算符
在一个新的应用程序中,我现在开始在observable上使用pipe方法使用“lettable操作符”,但我没有成功地集中导入这些操作符
因此,在某个组件中,我使用map和mergeMap,并按如下方式导入它们:
import { map } from 'rxjs/operators/map';
import { mergeMap } from 'rxjs/operators/mergeMap';
例如,如果我
我有两个要求
getCurrentBook():可观察
getDetailedInfo(bookId):可观察的
它们都返回带有信息的可观察对象,但是要使用第二个请求,我必须确保从第一个请求收到了信息,因为bookId在响应中
我知道我可以在其他订阅中订阅,但是这个解决方案似乎对我没有吸引力。一定有更优雅的方式
现有解决方案
getCurrentBook().subscribe(res => {
getDetailedInfo(res.id).subscribe(...);
})
我
标签: Rxjs
redux-observable
如果我一次运行一个epic的所有测试,只有第一个测试通过。由于框架不同,其他测试失败。但每次单独运行的测试都会通过
我找不到与此相关的任何问题。我在RxJS中找到了一些东西,而不是redux可观察文档。
我原以为TestScheduler上可能有某种重置功能,但实际上没有
我的一个测试(它们看起来都很相似):
test('如果电子邮件丢失,则应失败',()=>{
testScheduler.run({hot,expectObservable})=>{
const action$=新操作可维护(
我想运行一个工作流,用户可以定义并提供给一个将使用RxJS运行的程序。工作流中的每个项目都有一个操作、输入和输出:
const steps = [
{
action: someAction,
inputs: [],
outputs: []
}
]
输出可能没有定义;它们可能只是行动的结果。我还不是100%确定。它可以走任何一条路。此外,这个对象可能不是一切。他们可能还必须定义要使用的操作符,类似这样的东西
我知道我可以采取上述措施,并在RxJS管道中输出每一步
1 2 3 4 5 6 ...
下一页 最后一页 共 24 页