保存来自Javascript订阅的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保存来自Javascript订阅的数据相关的知识,希望对你有一定的参考价值。
我是新来的。我想从Rest API获取数据。从端点加载数据是可以的,但是我想稍后在方法之外使用它。例如,我想在另一个函数中汇总待办事项的一个属性。在funcion 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)
将显示响应,因为它是在可观察对象完成之后执行的。
console.log(this.todos)
显示.subscribe(...)
后出现[undefined
,因为可观察对象尚未完成,也就是说,尚未执行行data => this.todos = data
。
您正在正确保存数据以供使用。如果您将下一个要求的订阅更新为如下所示,那么总和将执行:
// from
data => this.todos = data
// to
data =>
this.todos = data;
this.getSum(this.todos);
这里是获取待办事项数组并将stackblitz example值加到userId
变量中然后显示该值的sum
。
以上是关于保存来自Javascript订阅的数据的主要内容,如果未能解决你的问题,请参考以下文章
PHP 未检测到来自 JavaScript 请求的 POST JSON 数据
text 来自https://stackoverflow.com/questions/5881204/how-to-set-formatting-with-javascriptserializer-w