小编use*_*222的帖子

使用RxJS Observables的Promise.all行为?

在Angular 1.x中,我有时需要提出多个http请求,并对所有响应做一些事情.我会把所有的promises抛出一个数组并调用Promise.all(promises).then(function (results) {...}).

Angular 2最佳实践似乎指向使用RxJS Observable作为http请求中的承诺的替代.如果我有两个或更多从http请求创建的不同Observable,它们是否相当于Promise.all()

javascript observable rxjs angularjs

71
推荐指数
4
解决办法
4万
查看次数

冷热观察:有"热"和"冷"运营商吗?

我回顾了以下SO问题: 什么是热和冷可观测量?

总结一下:

  • 当一个cold observable有一个观察者使用它时,它会发出它的值,即观察者接收的值序列与订阅时间无关.所有观察者都将使用相同的值序列.
  • 热的observable独立于其订阅发出值,即观察者接收的值是订阅时间的函数.

然而,我觉得热和冷仍然是混乱的根源.所以这是我的问题:

  • 默认情况下所有rx可观察量是否都是冷的(主题除外)?

    我经常读到事件是热观察的典型隐喻,但我也读到这Rx.fromEvent(input, 'click')是一个冷可观察的(?).

  • 是否有什么/哪些Rx运算符将冷观测值转换为热观测值(除了publish和之外share)?

    例如,它如何与Rx运算符一起使用withLatestFrom?让我们cold$成为一个冷酷的观察者.会sth$.withLatestFrom(cold$,...)是一个热门观察?

    或者,如果我不sth1$.withLatestFrom(cold$,...), sth2$.withLatestFrom(cold$,...)和订阅sth1sth2,将我总是看到两个相同的值sth

  • 我认为Rx.fromEvent会产生冷的可观测量,但事实并非如此,正如其中一个答案所述.但是,我仍然对此行为感到困惑:codepen.io/anon/pen/NqQMJR?editors=101.不同的订阅从同一个observable获得不同的值.click事件不是共享的吗?

javascript reactive-programming rxjs rxjs5 angular

60
推荐指数
2
解决办法
1万
查看次数

RxJS中的链接可观察量

我正在学习RxJS和Angular 2.假设我有一个带有多个异步函数调用的promise链,它取决于前一个的结果,如下所示:

var promiseChain = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1);
  }, 1000);
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(result + 2);
    }, 1000);
  });
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
      setTimeout(() => {
      resolve(result + 3);
        }, 1000);
  });
});

promiseChain.then((finalResult) => {
  console.log(finalResult);
});
Run Code Online (Sandbox Code Playgroud)

我在不使用promise的情况下单独使用RxJS的尝试产生了以下结果:

var observableChain = Observable.create((observer) => {
  setTimeout(() => {
    observer.next(1);
    observer.complete();
  }, 1000);
}).flatMap((result) => {
  console.log(result);

  return Observable.create((observer) …
Run Code Online (Sandbox Code Playgroud)

javascript reactive-programming promise rxjs rxjs5

57
推荐指数
1
解决办法
8万
查看次数

RxJs 5 share()运算符如何工作?

对我来说,对于RxJs 5 share()运算符的工作原理并不是100%清楚,请参阅最新的文档.Jsbin 这里的问题.

如果我创建一个0到2系列的observable,每个值相隔一秒:

var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
    console.log('some side effect');
});
Run Code Online (Sandbox Code Playgroud)

如果我为这个observable创建了两个订阅者:

source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到这个:

"some side effect ..."
"subscriptor 1 = 0"
"some side effect ..."
"subscriptor 2 = 0"
"some side effect ..."
"subscriptor 1 = 1"
"some side effect ..."
"subscriptor 2 = 1"
"some side effect ..."
"subscriptor 1 = 2"
"some …
Run Code Online (Sandbox Code Playgroud)

javascript rxjs rxjs5

29
推荐指数
2
解决办法
1万
查看次数

不同RxJS科目的语义是什么?

该主题的文档很少,很难在那里发现"入口点".

javascript rxjs rxjs5

18
推荐指数
1
解决办法
1万
查看次数

什么是RxJS主题和使用它们的好处?

我发现rxJS文档将它们定义为

什么是主题?RxJS主题是一种特殊类型的Observable,允许将值多播到许多观察者.虽然普通的Observable是单播的(每个订阅的Observer都拥有Observable的独立执行),但Subject是多播的.

它继续举例,但我正在寻找一个基本的ELI5解释.根据我的理解,它有助于处理和定义序列中的项目.那是对的吗?

我认为,对于我和其他人来说,看看一个简单的函数,有没有定义rxJS主题,以了解它为什么重要,这将是最有帮助的?

谢谢!

javascript subject rxjs typescript angular

11
推荐指数
2
解决办法
4001
查看次数

如何从对象中删除递归的未定义属性 - 同时保留构造函数链?

这是一个类似于如何使用lodash从对象中删除未定义和空值的问题?.但是,那里提出的解决方案并不保留构造函数.除此之外,我想只删除那些以'_'开头的键.

这是我正在寻找的,似乎无法从lodash获得:

输入: new Cons({key1 : 'value1', key2 : {key21 : 'value21', _key22: undefined}, key3: undefined, _key4 : undefined})

输出: {key1 : 'value1', key2 : {key21 : 'value21'}, key3: undefined}

例如 function Cons(obj){_.extend(this, obj)}

我有一个omitBy使用lodash 的解决方案,但是,我松开了构造函数信息(即我不能再使用它instanceof Cons来区分对象构造函数).forIn看起来像是递归遍历的一个很好的候选者,但它只为我提供了valuekey.我还需要路径才能删除对象(带unset).

请注意:

  • 该对象是任何有效的JavaScript对象
  • 构造函数是任何 javascript有效的构造函数,该对象随附已经设置的构造函数.
  • 生成的对象必须instanceof whatevertheconstructorwas仍为true

有没有更好的解决方案(使用lodash或其他方式)?

javascript lodash

10
推荐指数
1
解决办法
2652
查看次数

Angular2中的'rxjs/Subject'是什么?

我正在通过这本官方食谱学习Angular2 .

以下代码突然出现.为什么"missionAnnounced $"没有变量声明?让missionAnnounced $ = ...下面代码的逻辑是什么?

import { Injectable } from '@angular/core';
import { Subject }    from 'rxjs/Subject';
@Injectable()
export class MissionService {
  // Observable string sources
  private missionAnnouncedSource = new Subject<string>();
  private missionConfirmedSource = new Subject<string>();
  // Observable string streams
  missionAnnounced$ = this.missionAnnouncedSource.asObservable();
  missionConfirmed$ = this.missionConfirmedSource.asObservable();
  // Service message commands
  announceMission(mission: string) {
    this.missionAnnouncedSource.next(mission);
  }
  confirmMission(astronaut: string) {
    this.missionConfirmedSource.next(astronaut);
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript rxjs angular

10
推荐指数
1
解决办法
1万
查看次数

分享在RxJS 5中的重播

根据RxJS 5 MIGRATION.md,它看起来像shareReplay()被删除了.

  1. 为什么?
  2. 是否.publishReplay(1).refCount()忠实地复制行为?基本上我需要将最新的单个数据集重播给任何新订阅者.

javascript rxjs rxjs5

9
推荐指数
2
解决办法
5985
查看次数

如何重启或刷新Observable?

我有一个TypeScript/Angular 2 Observable,在我第一次调用它时效果很好.但是,我有兴趣将多个订阅者附加到同一个observable,并以某种方式刷新可观察的和附加的订阅者.这是我得到的:

query(): Rx.Observable<any> {

return this.server.get('http://localhost/rawData.json').toRx().concatMap(
    result =>
        result.json().posts
    )
    .map((post: any) => {
        var refinedPost = new RefinedPost();
        refinedPost.Message = post.Message.toLowerCase();

        return refinedPost;

    }).toArray();

}
Run Code Online (Sandbox Code Playgroud)

假设有一个刷新按钮,当按下该按钮时,重新执行此observable,并且连接到它的任何订阅者都会获得一组更新的数据.

我怎么能做到这一点?

javascript rxjs typescript angular

8
推荐指数
1
解决办法
5096
查看次数