首页 > 解决方案 > Angular Array 包含元素,仍然返回 null 的长度

问题描述

在组件中的 Angular 8 中,我正在运行以下行:

  console.log(this.array);

在浏览器中,在开发人员模式下,我在控制台上看到以下结果:

在此处输入图像描述

所以它显然有一些内容。以下行在控制台上写入“0”:

console.log(this.array.length);

这是 stackblitz 代码:https ://stackblitz.com/edit/angular-ivy-g57vnv

在 app 组件中,array 和 array.length 记录在控制台上。

数组的内容创建如下:在 service.service.ts 中,获取身份验证的 GET 请求到 Crowdvalley 托管的示例后端。由于 cv-auth 标头不是正确的(故意),因此响应是错误的。如果响应不包含结果“成功”,则向数组推送一个“假”字符串(参见 ServiceService)。如果您在开发人员模式下查看 Web 应用程序 ( https://angular-ivy-g57vnv.stackblitz.io ),您会看到该数组已获取其内容,但仍写入其长度为 0。

这是为什么?如何调查真实长度?如何从组件访问其内容?

标签: arraysangulartypescriptangular-componentsconsole.log

解决方案


这是因为ServiceService.isLoggedIn()返回一个数组,进行异步调用,然后改变所述数组。这是错误的模式 -isLoggedIn()应该返回异步的东西,或者是 Promise,或者更好的是(我们毕竟在一个 Angular 项目中)一个 Observable。

像往常一样,您可以在此线程中找到各种配方: 如何从异步调用返回响应?

(如果console.log你得到一个包含一些内容的数组,那么这仅仅是因为控制台中对象的延迟评估:它的实际值只被评估并且你点击那个箭头)。


推荐阅读