我创建了一个可观察的“数组”,以及按顺序触发它们的内容(或者并行也可以完成这项工作)。
let listObservables: Observable<any>[]=[];
for(let index of this.listIndexImagesToDelete){
let obserToAdd = this.httpImageService.deleteImageInProductIdFolderFromContainer_imagesWysiwygProduct(
this.arrayImagesInWysiwyg[index].productIdFolder, this.arrayImagesInWysiwyg[index].guid);
listObservables.push(obserToAdd);
}
Observable.from(listObservables)
.subscribe(
(data: any)=> {
console.log("[zr]Image deleted.");
},
(e:any) => {
console.log('onError: %s', e);
},
() => {
console.log('onCompleted');
this.http_GetAllImagesInWysiwyg();
}
);
控制台日志打印:
//(取决于数组中的可观察数量,它将多次打印)
“[zr]图片已删除。”
这段代码没有异常,但后端的api永远不会被调用。为什么即使打印成功消息也没有任何反应(“[zr]图像被删除。”)??
答案 0 :(得分:2)
您的Obervables永远不会被订阅,因此不会被解雇。
concat
:Observable
.concat(listObservables)
.concatAll()
.subscribe((data: any) => {
console.log("[zr]Image deleted.", data);
},
(e:any) => {
console.log('onError: %s', e);
},
() => {
console.log('onCompleted');
this.http_GetAllImagesInWysiwyg();
}
);
工作演示:https://plnkr.co/edit/uG5jVzcOMxC7OuE4HQU3?p=preview
forkJoin
:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md
Observable
.forkJoin(listObservables)
.subscribe(resultArray => // will contain all results from your listObservables
将订阅所有Observable,“等待”直到完成并将结果合并为一个订阅。
答案 1 :(得分:0)
传递一组Observable作为参数:
Observable.concat(listObservables)
不起作用,因为(我的RXJS 5.0.3版本)没有传递数组的覆盖,因此它应该完成:
Observable.concat(listObservables[0],listObservables[1],listObservables[n])
要解决此问题,我们将使用spread operator 这就是语法糖(3点)......用于将每个数组项作为参数的单个项。
function myFunction(x, y, z) { }
var args = [0, 1, 2]; //from [0, 1, 2] to 0, 1, 2
myFunction(...args);
因此工作函数调用应该是:
Observable.concat(...listObservables) //<--**using SPREAD OPERATOR**
.subscribe(
(data: any)=> {
console.log("[zr]Image deleted.");
console.log("[zr]Image deleted. : data: ", data);
},
(e:any) => {
console.log('onError: %s', e);
},
() => {
console.log('onCompleted');
this.http_GetAllImagesInWysiwyg();
}
);
本文提到了我的问题,处理其他rxjs函数:"Rx.Observable.merge is not accepting Array of Observables"