保存来自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订阅的数据的主要内容,如果未能解决你的问题,请参考以下文章

调用侦听器事件时,Javascript 数据不会持续存在

保存推送订阅

数组排序中的 JavaScript 与 PHP

开源巨献:来自百度的71款开源项目

PHP 未检测到来自 JavaScript 请求的 POST JSON 数据

text 来自https://stackoverflow.com/questions/5881204/how-to-set-formatting-with-javascriptserializer-w