javascript - 连接 : how to handle each subscribe with a specific next function as independent

标签 javascript asynchronous rxjs reactive-programming rxjs5

我想在 concat observable 中独立处理每个订阅的响应。我在 angular2 中使用 Rxjs 5。

let source1 = //some Http service
let source2 = //some Http service
let source3 = //some Http service  

Observable.concat(source1,source2,source3)
      .subscribe(data=> console.log(data));

上面的 concat observable 工作正常,只要从每个源返回的数据属于同一类型并且我必须以相同的方式处理所有 3 个源的返回数据。

但是,如果从不同服务生成 promise 的来源和订阅中返回的每个来源的数据不同并且需要单独处理怎么办。这可能吗?以下是我所要求的伪代码。

let source1 = //some Http service1 returns a string
let source2 = //some Http service2 returns a number
let source3 = //some Http service3 returns a boolean  

//The following is pseudo code
Observable.concat(source1,source2,source3)
      .subscribe(data_source1=> console.log(data_source1))
      .subscribe(data_source2=> console.log(data_source2 +3))
      .subscribe(data_source3=> console.log(data_source3 === true));

附注显然,所有响应都需要按顺序处理,而不是并行处理。

最佳答案

你可以使用 forkJoin()在所有 Observables 完成后发出。

但是,你说你想按顺序处理响应,所以我猜你想一个接一个地开始请求。

这仍然可以通过 concat 解决,然后使用 toArray() 将所有响应合并到一个数组中。

const Observable = Rx.Observable;

let source1 = Observable.of(42).do(() => console.log('source1')).delay(500);
let source2 = Observable.of(true).do(() => console.log('source2')).delay(500);
let source3 = Observable.of("Hello, World!").do(() => console.log('source3')).delay(500);

Observable.concat(source1, source2, source3)
    .toArray()
    .subscribe(data => console.log(data));

这会打印到控制台:

"source1"
"source2"
"source3"
[42, true, "Hello, World!"]

有多个 do() 运算符来显示 Observables 是延迟启动的。

查看现场演示:https://jsbin.com/kikuceh/1/edit

关于javascript - 连接 : how to handle each subscribe with a specific next function as independent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40825126/

相关文章:

javascript - RequireJS define() 不调用回调

javascript - Backbone 僵尸观点和良好实践

ios - 处理失败的后台 API POST

javascript - 这种不正常的行为是由 Javascript 异步运行引起的吗?

angular - 将 Angular2 Http 响应转换为 ConnectableObservable

javascript - 将类别添加到一个下拉列表中 从其他下拉列表中删除类别

javascript - 语法错误: Unexpected token using async and babel in koa

javascript - 从 redux-observable 史诗中访问状态

angular - 订阅 Angular 服务中变量值的变化

javascript - 用另一个数组对一个对象数组进行排序