加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

踢脚线 – RXJS控制可观察的调用

发布时间:2020-12-17 07:48:03 所属栏目:安全 来源:网络整理
导读:我在我的Angular 2项目中使用了 RxJs version 5. 我想创建一些可观察值,但是我不想立即调用可观测值. 在version 4,您可以使用(例如)Controlled命令或Pausable Buffers来控制调用. 但该功能在版本5中不可用(yet). 如何在RxJs 5中获得这种功能? 我的最终目标
我在我的Angular 2项目中使用了 RxJs version 5.
我想创建一些可观察值,但是我不想立即调用可观测值.

在version 4,您可以使用(例如)Controlled命令或Pausable Buffers来控制调用.
但该功能在版本5中不可用(yet).

如何在RxJs 5中获得这种功能?

我的最终目标是排列创建的可观察值并逐个调用它们.只有当前一个被成功处理时,才调用下一个.
当一个失败时,队列被清空.

编辑

通过@Niklas Fasching的评论,我可以用Publish操作创建一个工作解决方案.

JS Bin

// Queue to queue operations
const queue = [];

// Just a function to create Observers
function createObserver(id): Observer {
    return {
        next: function (x) {
            console.log('Next: ' + id + x);
        },error: function (err) {
            console.log('Error: ' + err);
        },complete: function () {
            console.log('Completed');
        }
    };
};

// Creates an async operation and add it to the queue
function createOperation(name: string): Observable {

  console.log('add ' + name);
  // Create an async operation
  var observable = Rx.Observable.create(observer => {
    // Some async operation
    setTimeout(() => 
               observer.next(' Done'),500);
  });
  // Hold the operation
  var published = observable.publish();
  // Add Global subscribe
  published.subscribe(createObserver('Global'));
  // Add it to the queue
  queue.push(published);
  // Return the published so the caller could add a subscribe
  return published;
};

// Create 4 operations on hold
createOperation('SourceA').subscribe(createObserver('SourceA'));
createOperation('SourceB').subscribe(createObserver('SourceB'));
createOperation('SourceC').subscribe(createObserver('SourceC'));
createOperation('SourceD').subscribe(createObserver('SourceD'));

// Dequeue and run the first
queue.shift().connect();
您可以通过 publishing观察器来分离观察者的开始.已发表的观察结果只能在调用 connect之后开始.

请注意,所有订阅者将共享对可观察序列的单个订阅.

var published = Observable.of(42).publish();
// subscription does not start the observable sequence
published.subscribe(value => console.log('received: ',value));
// connect starts the sequence; subscribers will now receive values
published.connect();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读