javascript - 保存来自 Javascript 订阅的数据
问题描述
我是新手。我想从 Rest API 获取数据。从端点加载数据是可以的,但我想稍后在方法之外使用它。例如,我想在另一个函数中总结待办事项的一个属性。在函数 loadTodos() 中,第一个控制台日志显示数据,但第二个控制台日志仅显示“未定义”。如何保存 loadTodos() 返回的值并在以后使用?
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { TodoDomainService } from '../services/todo-domain.service';
import { Todo } from 'app/model/todo';
@Component({
selector: 'app-todo-listing',
templateUrl: './todo-listing.component.html',
styleUrls: ['./todo-listing.component.scss']
})
export class TodoListingComponent implements OnInit {
todo: Todo;
constructor(private todoService: TodoDomainService, private router:Router) { }
public todos;
ngOnInit() {
this.loadTodos();
this.todo = new Todo();
}
private loadTodos() {
this.todoService.getTodos().subscribe(
data => { this.todos = data },
err => console.error(err),
() => console.log("todos loaded." +this.todos)
);
console.log(this.todos)
}
}
private getSum(todos) {
var sum = 0;
for(var i = 0; i < todos.length; i++){
sum += todos.price[i]}
return this.aggregatedSales;
}
解决方案
console.log("todos loaded." +this.todos)
将显示一个响应,因为它是在 observable 完成后执行的。
console.log(this.todos)
在你的.subscribe(...)
表演之后undefined
,因为可观察的还没有完成,也就是说,这条线data => { this.todos = data }
还没有被执行。
您正在正确保存数据以供使用。如果您将下一个调用更新为如下所示,则总和将执行:
// from
data => { this.todos = data }
// to
data => {
this.todos = data;
this.getSum(this.todos);
}
这是获取 todos 数组并将值添加到变量中然后显示值的stackblitz 示例。userId
sum
推荐阅读
- excel - PDF 到 Excel 数据库
- azure - 从 Azure 数据资源管理器下载后 XLSX 文件损坏
- ios - 更改 UIImagePickerController 中的取消按钮文本
- python - 如何从地图对象中获取二进制值(
- react-native - 样式在本机反应中的所有文本视图中都不起作用
- java - 不允许同一玩家同时成为游戏中的玩家
- variables - Pytorch使用Multi-gpu时成员变量的值不正确
- powershell - 无法理解来自互联网的 powershell 代码
- machine-learning - 如何将 ELMo 嵌入表示为一维数组?
- deployment - 访问被 CORS 策略阻止的 XMLHttpRequest