RxJ发出易碎的请求序列

时间:2019-02-11 10:33:16

标签: rxjs

我需要对API进行一系列调用(此序列的长度是可变的)。在每次迭代中,我只想在成功且没有向观察者返回错误的情况下继续。同样,这些请求不需要先前请求的任何数据。

我该如何实现此请求队列?

现在我将其视为递归调用直到请求数组结束的方法。

sendQueue(list: any[]) {
    const {request, transferData} = list[0];
    this.send(request, transferData).subscribe(msg => {
        if (list.length > 0) {
            this.sendQueue(list.slice(1));
        } else {
            return of(true);
        }
    }, err => {
        this.ns.showError(err);
        return of(false);
    });
}

1 个答案:

答案 0 :(得分:1)

您可以使用concat。它将一个接一个地订阅每个源Observable,如果其中任何一个抛出错误,它将停止。

sendQueue(list: any[]) {
  const sources = list.map(({ request, transferData }) => this.send(request, transferData));
  return concat(...sources);
}