如何解决TypeError:无法读取未定义的属性“ 0”?

时间:2018-07-13 13:37:08

标签: angular

我不确定为什么会收到此错误消息。

我已经在此问题上检查了SO线程,但大多数似乎都试图访问未定义数组上的属性。

我不认为这是我的问题。

这是我收到此错误的代码。

addGizmo() {
    let gizmo = new gizmo();
    this.gizmoSubject.next(gizmo);    
    let dialogEdit = this.dialog.open(DialogGizmoAddEdit,
      {
        width: "300px",
        data: { gizmo: this.gizmoSubject.getValue(), inEditMode: false },
      });

    dialogEdit.afterClosed().subscribe(x => {
      if (x !== false) {
        this.loadGizmos();
        this.dataCatalogService.addGizmo(x)
        .subscribe(
          () => this.loadGizmos(),
          error => this.handleError(error)
        );
      }
    });
  };

如果需要,我可以发布更多代码,但是“ addGizmo”方法调用我的API会将gizmo添加到数据库中,并返回一个字符串。我已经在Angular的内部和外部测试过该API,但在那里没有发现问题。

subscribe方法中似乎发生了错误。到那时,它已经将Gizmo添加到了DB中。

单步执行代码,我再也看不到loadGizmo的调用。

Angular Setup:
Angular CLI: 6.0.8
Node: 10.5.0
OS: win32 x64
Angular: 6.0.6
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, platform-server, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.6.8
@angular-devkit/build-angular     0.6.8
@angular-devkit/build-optimizer   0.6.8
@angular-devkit/core              0.6.8
@angular-devkit/schematics        0.6.8
@angular/cdk                      6.3.1
@angular/cli                      6.0.8
@angular/material                 6.3.1
@schematics/angular               0.6.8
@schematics/update                0.6.8
rxjs                              6.2.1
typescript                        2.7.2
webpack                           4.12.1

2 个答案:

答案 0 :(得分:0)

x可能不确定。

console.log(undefined !== false);
// prints true

因为在您的编码示例中,没有地方可以读取属性0或使用数组访问器。该错误发生在其他地方。

编写if(x !== false)时与if(x)的逻辑不同。

答案 1 :(得分:0)

该问题归因于API。即使它返回的状态代码值为200,但我的拦截器在响应中捕获了以下错误。

Unexpected token d in JSON at position 0

这与以下事实有关:我正在将主体中的json发送到API,并且似乎在假定响应也应该为json,在这种情况下,它正在返回字符串。

我不确定该如何处理,但是如果我不明白,可以提出另一个问题。