Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何订阅阵列中的多个观测值,但一次只能订阅一个?_Angular_Typescript_Ionic3_Rxjs6 - Fatal编程技术网

Angular 如何订阅阵列中的多个观测值,但一次只能订阅一个?

Angular 如何订阅阵列中的多个观测值,但一次只能订阅一个?,angular,typescript,ionic3,rxjs6,Angular,Typescript,Ionic3,Rxjs6,我有一个数组中的任务列表,我需要通过调用web服务来运行它们 但问题是,它们在一个数组中,我需要一次运行一个,这意味着:只在完成此操作后运行下一个,无论是否发生错误 这里有一段代码,我使用了combinelatetest,但这样我只有在所有代码都完成后才能得到结果 let arrayOfTasks: ServerTask[] = cacheInfo.cacheData; let observables = []; arrayOfTasks.forEach((task: ServerTask) =

我有一个数组中的任务列表,我需要通过调用web服务来运行它们

但问题是,它们在一个数组中,我需要一次运行一个这意味着:只在完成此操作后运行下一个,无论是否发生错误

这里有一段代码,我使用了combinelatetest,但这样我只有在所有代码都完成后才能得到结果

let arrayOfTasks: ServerTask[] = cacheInfo.cacheData;
let observables = [];
arrayOfTasks.forEach((task: ServerTask) => {
  if (task.method === 'post') {
    let observable$: any = this.restService.sendPost(task.action, task.payload, false, task.cacheName);
    observables.push(observable$);
  }
});

const combined = combineLatest(observables);
combined.subscribe((value: any[]) => {
  console.log('ARRAY DATA RETURNED');
  console.log(value);
}, error => {
  console.error(`Error running stored tasks: ${error}`);
}, () => {
  console.log('All cache tasks executed...');
});
有什么想法吗? 编辑1:

正如@trichetriche所建议的,这里是最终的解决方案:

concat(...observables).subscribe((result: any) => {
  console.log('RESULT: ', result);
}, error => {
  console.error(`Error running queue of tasks: ${error}`)
}, () => {
  console.log('All subscriptions executed');
});

为此,您可以使用
concat
,并使用阵列减速机:

obs$
  .reduce((acc, curr) => acc.pipe(concat(curr)), of(undefined))
  .subscribe(result => console.log(result));
您甚至可以使用creator
concat
而不是操作符:

concat(...obs$)
  .subscribe(res => console.log(res));

您可以使用
concat
和阵列减速机:

obs$
  .reduce((acc, curr) => acc.pipe(concat(curr)), of(undefined))
  .subscribe(result => console.log(result));
您甚至可以使用creator
concat
而不是操作符:

concat(...obs$)
  .subscribe(res => console.log(res));

非常感谢您的帮助,第二个选项很有魅力,但我承认这对我了解RxJs来说有点先进。不过,我真的需要了解该解决方案的概念。到底是什么“有吗?使用联系人创建者,我知道他们都被执行了吗?”?原因是我需要在最后清空数组。它只是连接可观察对象,就像连接数组一样,如果你想知道more@franzmobile你什么意思?你想在打电话时清空数组吗?我想在所有可观察对象都已订阅后清空数组。非常感谢你的帮助,第二个选项很有魅力,但我承认这对我的RxJs知识来说有点先进,但我真的需要理解该解决方案的概念。到底是什么“有吗?使用联系人创建者,我知道他们都被执行了吗?”?原因是我需要在最后清空数组。它只是连接可观察对象,就像连接数组一样,如果你想知道more@franzmobile你什么意思?你想在打电话时清空数组吗?我想在订阅了所有可观察对象后清空数组。