RxJS仅使用最后一个承诺的响应

时间:2015-12-26 21:03:17

标签: javascript promise rxjs

我怎样才能使用最后创建的承诺,取消(或不使用)所有先前的承诺?

该功能可以无限次运行。

rx.Observable.fromPromise(listingFactory.list())
            .flatMapLatest((e: any) => {
                return e;
            })
            .subscribe((e: any) => {
                console.log(e);
            });

1 个答案:

答案 0 :(得分:1)

如果你的listingFactory.list()返回一个可观察的承诺,那么你可以写:

listingFactory.list()
        .flatMapLatest((promise: any) => {
         return promise;
         })
        .subscribe((resolved_value: any) => {                     
          console.log(resolved_value);
        }, (error: any) => {
            console.log(error)});

flatMapLatest将等待最新发出的承诺解决,放弃之前的承诺。请注意,这些承诺不能被取消,但是它们的已解决的值(或拒绝)将被忽略。另请注意,flatMapLatest允许您返回可观察,承诺或可迭代。在那种特殊情况下,我们可以直接返回承诺,而无需使用.fromPromise运算符。此外,fromPromise运算符只需要一个promise作为参数,而不是它们的列表。

那么listingFactory.list()的类型是什么?你如何创造你的承诺来源?我误解了你的意图吗?