javascript - 使用 Observable 排队 promise

标签 javascript angular rxjs observable

我有一个 promise 流进来,我不希望它们在所有以前的 promises 都解决之前开始,但是同时使用 Observables。

我会尝试这样的事情:

let queue = Rx.Observable.create();

function addToQueue() {
  // How do I add this to the queue.
}

function removeFromQueue() {
  // How do i remove this item from the queue.
}

function getNewObservable() {
  const queueItem = Rx.Observable.fromPromise(new Promise(resolve => {
    setTimeout(() => {
      removeFromQueue();
      resolve();
    }, 1000);
  }));

  addToQueue();
  return queue;
}

getNewObservable().then(() => console.log('After 1000'));
getNewObservable().then(() => console.log('After 2000'));

// This one shouldn't run until the top two are finished
getNewObservable().then(() => console.log('After 3000'));

// This one would just wait for the previous one to resolve since
// the first two already resolved
setTimeout(() => {
  getNewObservable().then(() => console.log('After 4000'));
}, 2500);

最佳答案

那只是 concatMap 运算符。唯一的问题是您在哪里创建 Promise:

const queue = Rx.Observable.create();
const results = queue.concatMap(p => createPromise(p));

results.subscribe(console.log);

queue.add(getNewObservable(...));
queue.add(getNewObservable(...));
queue.add(getNewObservable(...));

关于javascript - 使用 Observable 排队 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857804/

相关文章:

javascript - 如何使用 rxjs 在 angular2 中的输入 keyup 事件上实现去抖动服务

Rxjs - 计算 div 内部/外部花费的时间

javascript - Metro Javascript 应用程序的 WACK 测试失败

Javascript 做 ssl 固定?

Javascript ToDo 列表添加元素

javascript - 新添加的元素 $.each 和 events

angular - 与 [(ngModel)] 绑定(bind)的条件表达式

Angular路由器navigateByUrl()不调用ngOnInit()

javascript - rxjs 限制获取直到请求完成

angular - 在Angular : Error encountered resolving symbol values statically中创建Redux存储时出错