在Observable完成后返回单个对象

时间:2018-04-09 13:46:12

标签: javascript angular rxjs observable

我有一个带有几个元素(字体)的Observable

myFontsObservable = Observable.of<Font>(new Font("font1"), new Font("font2"));

现在我想订阅这个Observable,处理所有字体并在Document中注册它们,然后在完成所有这些字体的处理后,返回Document

public registerFonts(myFontsObservable): Observable<Document> {
    doc = new Document();
    myFontsObservable.subscribe(
        font => doc.register(font);
        (err) => {},
        () => return Observable.of(doc);
    );
    // I need to return something here too
}

这段代码不会编译,因为我需要在订阅之外返回一些东西。但是如果我在那里返回一些东西,那么当我调用registerFonts(...)时,我得到错误的值,因为它还没有完成

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你可以沿着这些方向尝试一些事情

public registerFonts(myFontsObservable): Observable<Document> {
    return myFontsObservable
           .reduce((doc, font) => {
              doc.register(font);
              return doc
           }, new Document())
}

答案 1 :(得分:0)

使用mergeMap运算符(可管道)。

此运算符将处理第一个observable的结果,并需要返回另一个observable。我相信这就是你所需要的。

ImageView