[英]Angular 2 promise/observable chain two events?
我想知道是否可以在角度2的以下用例中使用可观察或承诺 :
有两个异步上传任务。 我想知道如何检测这两项任务都已完成。
我的上传任务(在promise中实现,但如果需要可以很容易地更改为observable )是这样的:
myService.upload('upload1').then(() => {
})
myService.upload('upload2').then(() => {
})
如何将这两个事件链接在promise或observable中,以便我知道两个任务都已完成? 谢谢
您可以将其中一个Combining Operators与observables一起使用。 例如, Observable.zip()
适用于promises ...
Observable.zip(
first,
second,
function (firstResolvedValue, secondResolvedValue) {
return firstResolvedValue && secondResolvedValue;
}
)
zip
接受可变数量的Observables或Promises作为参数,然后接受一个函数,该函数接受每个Observable发出的一个项目或由Promise作为输入解析,并生成由生成的Observable发出的单个项目。
使用forkJoin ,相当于Angular 1.x的$ q.all(a和b是observables):
Rx.Observable.forkJoin([a,b]).subscribe(t=> {
var firstResult = t[0];
var secondResult = t[1];
});
关闭所有源流时执行complete
。
Rx.Observable.merge(
myService.upload('upload1'),
myService.upload('upload2').subscribe({complete: () => { ... });
如果要设置要等待的最大结果数
Rx.Observable.merge(
myService.upload('upload1'),
myService.upload('upload2')
.take(2)
.subscribe({complete: () => { ... });
您可以使用Promise.all,它返回一个新的Promise,它在参数数组中的所有promise都已解析时解析。
Promise.all([myService.upload('upload1'), myService.upload('upload2')]).then(() => {
// ...
});
注意,如果你的myService.upload方法返回了Promise而不是Promise,你可以这样访问返回值:
Promise.all([myService.upload('upload1'), myService.upload('upload2')])
.then((retValue1, retValue2) => {
// ...
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.