繁体   English   中英

Angular 2承诺/可观察链两个事件?

[英]Angular 2 promise/observable chain two events?

我想知道是否可以在角度2的以下用例中使用可观察承诺

有两个异步上传任务。 我想知道如何检测这两项任务都已完成。

我的上传任务(在promise中实现,但如果需要可以很容易地更改为observable )是这样的:

myService.upload('upload1').then(() => {
})

myService.upload('upload2').then(() => {
})

如何将这两个事件链接在promiseobservable中,以便我知道两个任务都已完成? 谢谢

您可以将其中一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM