简体   繁体   English

“ ObjectUnsubscribedError”-使用get调用重新加载角度数据表时

[英]“ObjectUnsubscribedError”- while reloading the angular data table using get call

this.Showdata = false;
this.showSpinner = true;
this.subscription = this.assessmentlistService.getAll().subscribe(response => {
        if (response != null) {
            if (response.StatusCode >= 200 && response.StatusCode < 300) {
                this.AssessmentList = response.Data;
                this.Showdata = true;
            }
            else {
                //this.AssessmentList = [];
            }
            this.updateAssessmentList.next();
        }
        this.showSpinner = false;
    },
    error => {
        this.messageData = new MessageData();
        this.messageData.Message = "Server Error, please try again later";
        this.messageData.ShowErrorMessage = true;
        this.showSpinner = false;
    }
);

This is my api calling method. 这是我的api调用方法。 I tried the unsubscribe method. 我尝试了退订方法。 It is not working.the Below Code i used to refresh the data table for every 1 minute. 它不起作用。下面的代码我每1分钟刷新一次数据表。

Refresh() {
    setInterval(() => {
        this.subscription.unsubscribe();
        this.Showdata = false;
        this.showSpinner = true;
        this.subscription = this.assessmentlistService.getAll().subscribe(response => {
                if (response != null) {
                    if (response.StatusCode >= 200 && response.StatusCode < 300) {
                        this.AssessmentList = response.Data;
                        this.Showdata = true;
                    }
                    else {
                        //this.AssessmentList = [];
                    }
                    this.updateAssessmentList.next();
                }
                this.showSpinner = false;
            },
            error => {
                this.messageData = new MessageData();
                this.messageData.Message = "Server Error, please try again later";
                this.messageData.ShowErrorMessage = true;
                this.showSpinner = false;
            }
        );
    }, 60000);
}

Iam Getting this error when im trying to reload the datatable. 我试图重新加载数据表时收到此错误。

ObjectUnsubscribedError {name: "ObjectUnsubscribedError", stack: "ObjectUnsubscribedError: object unsubscribed↵ a…odule/AssessmentListComponent.ngfactory.js:549:5)", message: "object unsubscribed", ngDebugContext: DebugContext_, ngErrorLogger: ƒ} message : "object unsubscribed" name : "ObjectUnsubscribedError" ngDebugContext : DebugContext_ {view: {…}, nodeIndex: 74, nodeDef: {…}, elDef: {…}, elView: {…}} ngErrorLogger : ƒ () stack : "ObjectUnsubscribedError: object unsubscribed↵ at new ObjectUnsubscribedError (webpack-internal:///./node_modules/rxjs/_esm5/util/ObjectUnsubscribedError.js:22:26)↵ at Subject._trySubscribe (webpack-internal:///./node_modules/rxjs/_esm5/Subject.js:105:19)↵ at Subject.Observable.subscribe (webpack-internal:///./node_modules/rxjs/_esm5/Observable.js:166:93)↵ at DataTableDirective.ngOnInit (webpack-internal:///./node_modules/angular-datatables/src/angular-datatables.directive.js:23:28)↵ at checkAndUpdateDirectiveInline (webpack-interna ObjectUnsubscribedError {名称:“ ObjectUnsubscribedError”,堆栈:“ ObjectUnsubscribedError:对象已取消订阅…odule / AssessmentListComponent.ngfactory.js:549:5)”,消息:“对象未订阅”,ngDebugContext:DebugContext_,ngErrorLogger:ƒ}消息:“取消订阅对象”名称:“ ObjectUnsubscribedError” ngDebugContext:DebugContext_ {view:{…},nodeIndex:74,nodeDef:{…},elDef:{…},elView:{…}} ngErrorLogger:ƒ()堆栈:“ ObjectUnsubscribedError:取消订阅对象↵在新的ObjectUnsubscribedError(webpack-internal:///./node_modules/rxjs/_esm5/util/ObjectUnsubscribedError.js:22:26)在Subject._trySubscribe(webpack-internal:///./node_modules/rxjs) /_esm5/Subject.js:105:19)↵在Subject.Observable.subscribe(webpack-internal:///./node_modules/rxjs/_esm5/Observable.js:166:93)↵在DataTableDirective.ngOnInit(webpack-内部:///./node_modules/angular-datatables/src/angular-datatables.directive.js:23:28)↵在checkAndUpdateDirectiveInline(webpack-interna l:///./node_modules/@angular/core/esm5/core.js:12627:19)↵ at checkAndUpdateNodeInline (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14151:20)↵ at checkAndUpdateNode (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14094:16)↵ at debugCheckAndUpdateNode (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14987:76)↵ at debugCheckDirectivesFn (webpack-internal:///./node_modules/@angular/core/esm5/core.js:14928:13)↵ at Object.eval [as updateDirectives] (ng:///AssessmentModule/AssessmentListComponent.ngfactory.js:549:5)" proto : Error l:///./node_modules/@angular/core/esm5/core.js:12627:19)↵在checkAndUpdateNodeInline(webpack-internal:///../node_modules/@angular/core/esm5/core.js: 14151:20)↵在checkAndUpdateNode(webpack-internal:///../node_modules/@angular/core/esm5/core.js:14094:16)↵在debugCheckAndUpdateNode(webpack-internal:///./node_modules/@在debugCheckDirectivesFn上找到angular / core / esm5 / core.js:14987:76)↵(webpack-internal:///./node_modules/@angular/core/esm5/core.js:14928:13)↵在Object.eval [ as updateDirectives](ng:///AssessmentModule/AssessmentListComponent.ngfactory.js:549:5)“ 原型 :错误

If you want to repeat your code every 1 minute, use the Observable 's interval operator is much more convenient and cleaner: 如果您想每1分钟重复一次代码,请使用Observableinterval操作符更加方便和简洁:

Observable
    .interval(60*1000) //one minute
    .flatMap(() => this.assessmentlistService.getAll())
    .subscribe(response => {
        if (response != null) {
            //.... your other code
        }
    });

The .flatMap() allows you to repeatedly call the getAll() API after every resolve (think repeated subscribes). .flatMap()允许您在每次解析后重复调用getAll() API(请考虑重复订阅)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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