我试图使用以下代码从我的Home.ts方法Auth.service获取getSpams()中所有垃圾邮件的值,该方法运行良好,并在控制台中正确给出了结果。但是,当我尝试将服务结果保存在Object(totalspam)Home.ts中时,其结果为零大小的数组。

以下是我的组件:

Home.ts

    import { NavController , IonicPage} from 'ionic-angular';
    import { Component } from '@angular/core';
    import { AuthService } from '../../providers/auth-service/auth-service';
    import { Spam } from '../../providers/auth-service/auth-service';
    import {Observable} from 'rxjs/Observable';
    @IonicPage()
    @Component({
      selector: 'page-home',
      templateUrl: 'home.html'
    })
    export class HomePage {

      totalspam:Spam[] = [];

      constructor(public navCtrl: NavController,private auth:AuthService) {

         this.auth.getSpams().subscribe(spam=>{this.totalspam = spam});
         console.log(this.totalspam);

      }

    }


AuthService.ts

    getSpams(): Observable<Spam[]> {
              let url = 'http://115.113.49.148:8080/allspam';
              let headers = new Headers();
              headers.append('Content-Type', 'application/x-www-form-urlencoded');
              let options   = new RequestOptions({ headers: headers });

              // get spams from api
              return this.http.get(url, options)
                  .map((response) => response.json());
          }


AuthService.ts

    export class Spam
    {
      _id:string;
      count:Number;
      spamNumber:string;
      spamType:Array<String>;
    }

最佳答案

您的问题是您在异步方法之后直接在控制台记录结果。此行:console.log(this.totalspam);在实际更改值之前被调用。当您处理异步请求时,诸如延迟,请求大小和浏览器本身之类的因素可能意味着可变的解决时间。

异步方法的目的是在以后运行并处理结果而不阻塞任何其他代码,因此console.log立即被调用。如果将代码更改为以下代码,则只要返回结果,就应该看到已填充的数组:

this.auth.getSpams().subscribe(spam => {
    this.totalspam = spam;

    console.log(this.totalspam);
});


如果仍然看不到任何内容,则应检查您的请求是否返回了所需的结果。

关于javascript - 类型Scripit#总是获取零大小的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45012171/

10-12 02:04