A ligação de dados angulares não funcionará com assíncrono / espera, mas com promessas

As ligações de dados não são atualizadas se seus valores forem alterados após umawait declaração.

  handle() {
    this.message = 'Works'
  }

  async handle() {
    this.message = 'Works'
  }

  async handle() {
    await new Promise((resolve, reject) => {
      resolve()
    })
    this.message = 'Works'
  }

  async handle() {
    await new Promise((resolve, reject) => {
      setTimeout(() => resolve(), 3000)
    })
    this.message = 'Doesn\'t work'
  }

  handle() {
    new Promise((resolve, reject) => {
      setTimeout(() => resolve(), 3000)
    })
    .then(() => this.message = 'Works')
  }

Por que os dois últimos não se comportam da mesma forma? eles não deveriam ser a mesma coisa?

Ionic: 3.9.2

Angular: 5.0.3

TypeScript: 2.4.2

Edição: me deparei com outro problema com isso que pode ser útil para alguns.

Alterar os valores de uma ligação no construtor se comporta de maneira diferente para ionViewDidLoad ou ngOnInit!

  constructor(private zone: NgZone) {
    // This will cause the same problems, bindings not updating
    this.handle()
  }

  constructor(private zone: NgZone) {
    // Unless you do this...
    this.zone.run(() => {
      this.handle()
    })
  }

  ionViewDidLoad() {
    // But I think this is better/cleaner
    this.handle()
  }

questionAnswers(4)

yourAnswerToTheQuestion