【问题标题】:How to solve TypeError: Cannot read property '0' of undefined?如何解决 TypeError:无法读取未定义的属性“0”?
【发布时间】:2018-12-21 21:54:58
【问题描述】:

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

我已经检查了有关此问题的 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 添加到了数据库中。

单步执行代码,我从来没有看到 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

【问题讨论】:

  • 你可以尝试在 if 条件下发出警报来检查条件是否满足?

标签: angular


【解决方案1】:

问题是由 API 引起的。即使它返回了状态码 200 和它的值,我的拦截器在它的响应中捕获了以下错误。

Unexpected token d in JSON at position 0

这与我将正文中的 json 发送到 API 的事实有关,它似乎假设响应也应该是 json,在这种情况下它返回一个字符串。

我不确定如何处理这个问题,但如果我想不通,我可以提出另一个问题。

【讨论】:

    【解决方案2】:

    x 可能未定义。

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

    由于在您的编码示例中没有读取属性0 或使用数组访问器的位置。错误发生在其他地方。

    当您写if(x !== false) 时,它与if(x) 的逻辑不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多