循环完成后Ionic2 / TypeScript清除变量

时间:2016-04-16 17:18:17

标签: javascript typescript ionic-framework

我正在尝试做我认为应该是一个非常简单的例子。这是在Ionic 2中用typescript编写的。

我想遍历2个hello数组。一旦完成循环,我想清除this.message。我有一个runHello()函数。我认为for循环首先运行然后运行this.message =“”但是它在循环完成之前运行。

我搜索了很多关于此事的内容,除了Promises之外,我找不到多少帮助。我认为这对此有点复杂,并且承诺似乎不适用于Ionic或Typescript。

我有一个resetHello()函数,如果我无法使用它,我将绑定到一个按钮。

学习编程相当新。任何帮助将不胜感激!

export class Page1 {

  message: string = "";
  helloArr: Array<any>;

  constructor() {}

  sayHello(){
   setTimeout( ()=>{
      this.message ="Hello";
        }, 2000);
    };

  sayHello2(){
   setTimeout( ()=>{
      this.message ="Hello2";
    }, 3000);
  };

  runHello(){
    this.helloArr = [this.sayHello(), this.sayHello2()];

      for(let func of this.helloArr){
        func;
      };

      this.message = "this runs before for loop is done";

  }

  // resetHello(){
    //   this.message ="";
   // }

  }

1 个答案:

答案 0 :(得分:0)

setTimeout次呼叫是异步的,因此在检查是否应重置this.message之前,您必须等待其回调运行。

    export class Page1 {

        message: string = "";
        helloArr: Array < any > ;
        count = 0;
        constructor() {}

        sayHello() {
            setTimeout(() => {
                this.message = "Hello";
                decrement()
            }, 2000);
        };

        sayHello2() {
            setTimeout(() => {
                this.message = "Hello2";
                decrement();
            }, 3000);
        };

        runHello() {
            this.helloArr = [this.sayHello(), this.sayHello2()];
            this.count = this.helloArr.length;
            for (let func of this.helloArr) {
                func;
            };

            // this.message = "this runs before for loop is done";

        }
        decrement() {
            this.count = --this.count;
            if (this.count == 0) {
                this.message = "";
            }
        }

    }