arrays - 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。
这是为什么?如何调查真实长度?如何从组件访问其内容?
解决方案
这是因为ServiceService.isLoggedIn()
返回一个数组,进行异步调用,然后改变所述数组。这是错误的模式 -isLoggedIn()
应该返回异步的东西,或者是 Promise,或者更好的是(我们毕竟在一个 Angular 项目中)一个 Observable。
像往常一样,您可以在此线程中找到各种配方: 如何从异步调用返回响应?
(如果console.log
你得到一个包含一些内容的数组,那么这仅仅是因为控制台中对象的延迟评估:它的实际值只被评估并且你点击那个箭头)。
推荐阅读
- java - 更改双向链表中泛型类型节点的值
- excel - Excel中的嵌套IF语句或更好的公式
- spring-rabbit - Spring-boot 2 rabbitmq MessageConverter无法正常工作
- python - 在 Heroku 上重新启动时,如何避免 GroupMe 机器人两次读取相同的消息?
- php - 在 CentOS 7 中使用 PHP 连接数据库时访问被拒绝错误
- matrix - 打印复杂矩阵 Fortran
- android - 谷歌播放中的应用程序未显示在最新的三星银河系上
- qt - 有没有办法确定 OpenGL 纹理或 QOpenGLTexture 的图形内存占用?
- c# - DataGridView[c, r] (.get_Item()) 很慢?
- python - Python删除第一个视图和第一次点击之间的所有行?