首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular RxJS flatMap this _this

Angular RxJS flatMap this _this
EN

Stack Overflow用户
提问于 2018-02-28 17:54:09
回答 1查看 357关注 0票数 0

我试图用flatMap链接2个订阅,但是flatMap中的"this“并不指向我的组件,而是指向MergeMapSubscriber。在运行时,_this引用我的组件,但是如果我在代码中使用它,TypeScript不会编译

代码语言:javascript
复制
import { flatMap } from 'rxjs/operators';

this.payexMasterService.queryOk().flatMap(
        (res: ResponseWrapper) => {
            _this.templateData.dataSets[0].data[0] = res.json;
            return _this.payexMasterService.queryError();
        }
    ).subscribe(
        (res: ResponseWrapper) => {
           this.templateData.dataSets[0].data[1] = res.json;
           this.data = Object.assign({}, this.templateData);
        },
        (res: ResponseWrapper) => this.onError(res)
    );

完整的代码。

代码语言:javascript
复制
@Component({
    selector: 'pay-pie',
    templateUrl: './payex-master-pie.component.html',
    styleUrls: []
})
export class PayexMasterPieComponent implements OnInit {
    numOk: number;
    numError: number;
    currentAccount: any;
    eventSubscriber: Subscription;
    data: any;
    options: any;
    templateData: any;



    constructor(
        private payexMasterService: PayexMasterService,
        private jhiAlertService: JhiAlertService,
        private eventManager: JhiEventManager,
        private principal: Principal
    ) {

        this.templateData = {
                labels: ['OK', 'Error'],
                datasets: [{
                    data: [0, 0],
                    backgroundColor: [
                        '#36A2EB',
                        '#FF6384',

                    ],
                    hoverBackgroundColor: [
                        '#36A2EB',
                        '#FF6384',

                    ]
                }]
            };
}

    loadAll() {
        this.payexMasterService.queryOk().pipe(flatMap(
            (res: ResponseWrapper) => {
                this.templateData.dataSets[0].data[0] = res.json;
                return this.payexMasterService.queryError();
            }
        )).subscribe(
            (res: ResponseWrapper) => {
               this.templateData.dataSets[0].data[1] = res.json;
               this.data = Object.assign({}, this.templateData);
            },
            (res: ResponseWrapper) => this.onError(res)
        );


    }

    ngOnInit() {
        this.loadAll();
        this.principal.identity().then((account) => {
            this.currentAccount = account;
        });
    }


    private onError(error) {
        this.jhiAlertService.error(error.message, null, null);
    }
}

额外的详细信息,以便堆栈溢出可以接受post

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 18:03:01

要访问组件的管道,您应该使用this函数。.pipe(flatMap(...))

在新版本的rxjs中,该操作符称为mergeMap。https://www.learnrxjs.io/operators/transformation/mergemap.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49026580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档