Измерение времени для внешнего вызова API: обрабатывать асинхронизм в угловых - PullRequest
0 голосов
/ 12 июня 2019

Мне просто нужно простое угловое приложение, чтобы вызвать внешний API (запрос на получение) и измерить, как долго приложение должно получать данные.

Мой код выглядел так:

  measureData(): {
    this.t0 = performance.now();

    this.errors = '';

    this.getHello().subscribe(
      (result: string) =>
        {
          this.text = result
          console.log("test")
          return this.text
        },
        error => {
          this.errors = error.message
          console.log(error.message)
          return this.errors
        }
    )
    this.t1 = performance.now();
    this.test = this.t1 - this.t0;
    console.log("Action took " + this.test + " milliseconds.")
    this.times.push(this.test);
  }  

В этом случае у меня проблемы с асинхронизмом. Итак, я попробовал это:

main(){
    this.measureData().subscribe(
      (result: String) => {
        this.measurePerformance();
      }
    )
  }

  measureData(): Observable<any> {
    this.t0 = performance.now();

    this.errors = '';

    this.getHello().subscribe(
      (result: string) =>
        {
          this.text = result
          console.log("test")
          return this.text
        },
        error => {
          this.errors = error.message
          console.log(error.message)
          return this.errors
        }
    )
    return 
  }  

  measurePerformance() {
    this.t1 = performance.now();
    this.test = this.t1 - this.t0;
    console.log("Action took " + this.test + " milliseconds.")
    this.times.push(this.test);
  }

В этом случае я получаю эту ошибку:

ERROR TypeError: Cannot read property 'subscribe' of undefined

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Для своего решения я использовал await delay(500).

const delay = ms => new Promise(res => setTimeout(res, ms));

Мой полный код:

async measureData() {

   this.errors = '';
   const delay = ms => new Promise(res => setTimeout(res, ms));

   for (let i = 0; i < this.numberMeasurements; i++) {
     this.t0 = performance.now();
     this.getHello().subscribe(
       (result: string) => {
         this.text = result
         this.t1 = performance.now();
         this.test = this.t1 - this.t0;
         console.log("Action took " + this.test + " milliseconds.")
         this.times.push(this.test);
         console.log(result)
       },
       error => {
         this.errors = error.message
         console.log(error.message)
       }
     )
     await delay(500);
   }

 }
0 голосов
/ 12 июня 2019

Вы можете измерить прошедшее время следующим образом:

var start = new Date().getTime();

// Your code

var end = new Date().getTime();

var elapsedTime = end -start;

console.log("Time", elapsedTime );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...