在promise中未定义属性

时间:2019-06-12 20:42:48

标签: javascript angular typescript

这是我尝试使用Promise的打字稿功能:

public onEditSubmit() {
    const model = this._sharedService.createUpdateModel(
        null,
        this.editForm
    ) as LOG;

    model.fileId = this.fileId;
    model.startEffectiveDate = Shared.toISODate(model.startEffectiveDate);
    model.endEffectiveDate = Shared.toISODate(model.endEffectiveDate);



    let deferredExecutionCheck = new Promise((resolve, reject) => {
        this._updateService
            .getAllById(this.selectedItem.LogId)
            .subscribe(
                r => {
                    this.records = r;

                    this.records.forEach(element => {
                        if (
                            element.StatusId === 1 ||
                            element.StatusId === 2 ||
                            element.StatusId === 4 ||
                            element.StatusId === 5
                        ) {
                            this._notificationService.showErrorMessage(
                                `MESSAGE GOES HERE`,
                                "IN PROGRESS"
                            );

                            reject("In Progress");
                        }
                    });
                    resolve("Not In Progress");
                },
                e => {
                    throw e;
                }
            );
        console.log("finished");
    });

    let originalEditSubmit = function(result: any) {
        if (this.editMode === "Add") {
            this.add(model);
        } else {
            if (
                (model.wfStatusId === Status.Review ||
                    model.wfStatusId === Status.LoadFailed ||
                    model.wfStatusId === Status.Completed) &&
                model.eventStatusId === eStatus.Cancelled
            ) {
                this._confirmDlg.closable = false;
                this._confSvc.confirm({
                    accept: () => {
                        model.cancelRcdb = true;
                        this.update(model);
                    },
                    message: "Cancel RCdB Dataset?",
                    reject: () => {
                        model.cancelRcdb = false;
                        this.update(model);
                    }
                });
            } else {
                this.update(model);
            }
        }
    };

    deferredExecutionCheck.then(
        result => originalEditSubmit(result),
        error => console.log("error", error)
    );
}
  

错误:未捕获(承诺):TypeError:无法读取属性   未定义TypeError的“ editMode”:无法读取以下属性的“ editMode”   在originalEditSubmit上未定义

我将this.fileId属性移到了OriginalEditSumbmit方法之外,现在正在读取它。但是现在看来this.editMode遇到了同样的问题。

这样的承诺中是否可以不包含这些属性?

1 个答案:

答案 0 :(得分:1)

更改

let originalEditSubmit = function(result: any) {

let originalEditSubmit = (result: any) => {