Angular2多个Observables和forkJoin无法正常工作

时间:2017-01-30 14:27:29

标签: angular

我有以下代码,其中console.log('data')永远不会被命中。我认为它与主题有关。有人可以帮忙吗?

    getTextResourceSubject(key: string): Observable<string> {        
        const subject = new Subject<string>();
        // Do something here
        return subject;
    }
    
    
    initialise(title: string, message: string, yes: string, no: string) {
        var titleTranslated: string;
        var messageTranslated: string;
        var yesTranslated: string;
        var noTranslated: string;

        console.log('initialising');
        
        Observable.forkJoin(
            this.getTextResourceSubject(title),
            this.getTextResourceSubject(message),
            this.getTextResourceSubject(yes),
            this.getTextResourceSubject(no)
        ).subscribe(
            (data) => {
                console.log('data');

                titleTranslated = data[0];
                messageTranslated = data[1];
                yesTranslated = data[2];
                noTranslated = data[3];

                console.log(data);
            },
            err => console.log(err)
          );
      }
           

1 个答案:

答案 0 :(得分:0)

它肯定与Subject有关。您需要将数据传递到主题中,否则它不会发出任何值,也不会收到数据。您需要做的是发布值

mySubject.next(value);

你的意图不太明确,但我假设你想要另一种类型的主题,可以是BehaviorSubject或ReplaySubject。

这应解决问题

getTextResourceSubject(key: string): Observable<string> {        
    const subject = new BehaviorSubject<string>(key);
    // Do something here
    return subject;
}

这将创建一个填充了key值的主题。

实际上,我认为在您的案例中没有使用主题的任何意义。您也可以尝试使用

getTextResourceSubject(key: string): Observable<string> {        
    const obs = Observable.of(key);
    // Do something here
    return obs;
}