【发布时间】:2020-12-06 18:45:13
【问题描述】:
[投票赞成的人:我不想把所有东西都放在ngOnit中-因为我告诉过你:我需要在很多函数中重用API响应和模型数组,所以我需要写一些东西我可以重复使用
你知道,我实际上可以解决每个问题,只需调用 subscribe 中的所有内容或在每个函数中一次又一次地订阅。
我已经尝试过其他 SO 问题,其中大多数都放在 ngOnIt 中。我只想在那里调用必要的函数,所以请不要弄乱那个地方
请帮助我编写一个函数,以便我可以重用我的 API 响应,或者我可以重用由 API 响应 this.menu = data; 初始化的模型]
我想从我的 API 响应中打印一个菜单。
此外,我需要在多个函数中多次使用响应,但是当我超出 subscribe 块时,我得到空值
这是我的代码:
import { Component, OnInit } from '@angular/core';
// import { LoginModel } from "../../models/login/login-model";
import { MenuModel } from "../../models/menu/menu-model";
import { SubmenuModel } from "../../models/submenu/submenu-model";
// import { AccessModel } from "../../models/access/access-model";
import { MenuService } from "../../services/menu/menu.service";
import { SubmenuService } from "../../services/submenu/submenu.service";
@Component({
selector: 'app-admin-access',
templateUrl: './admin-access.component.html',
styleUrls: ['./admin-access.component.css']
})
export class AdminAccessComponent implements OnInit {
menu: MenuModel[] = null;
submenu: SubmenuModel[] = null;
constructor(private menuService: MenuService, private submenuSerive: SubmenuService) { }
ngOnInit(): void {
this.getMenu();
this.printMenu();
}
getMenu() {
this.menuService.GetAllMenu().subscribe((data: MenuModel[]) => {
this.menu = data;
console.log("first use : ");
console.log(data);
console.log("second use : ");
console.log(this.menu);
})
}
printMenu(){
console.log("third use : ");
console.log(this.menu);
}
}
这是输出:
从printMenu() 函数看到我的所有响应都是空的。但为什么?我之前确实订阅并保存了该值。
那么我怎样才能从 API 响应中永久保存一个值呢?
【问题讨论】:
-
还告诉我应该使用 subscribe 还是应该使用 async-await
-
其实你可以试试demo。编写一个函数,首先执行控制台日志,然后编写订阅,然后在内部订阅执行控制台日志,然后再在外部订阅一个日志。然后观察顺序。大多数情况下你会得到你的答案。在打字稿中,订阅之外的任何内容都将继续执行。
-
我没有投反对票,但是,我明白为什么这是反对票。可能是因为您的示例实际上并不是真实世界的实现——另外,您似乎还没有掌握异步概念。因此,即使您的问题听起来很有道理,但它向许多人表明您并没有费心去实际查看此类场景在实际应用程序中是如何完成的。
标签: angular typescript asynchronous rxjs