承诺结果后更新html的最佳方法

时间:2017-04-13 08:29:44

标签: javascript angular promise ionic2

我想知道绑定结果的最佳方法,这是使用角度2(我使用离子2)注入html标签... 如您所知,异步编码的主要问题是丢失对当前对象的引用。看来我应该将当前对象作为参数传递给Promise函数生成器。 我搜索互联网寻求更好的解决方案,但我发现没有那么还有更好的approch吗?

  

Ionic 2本身使用观察和订阅做异步过程。但是主要的问题是,对于不可观察的现有功能,它无法工作!

我的approch:

注射类:

export class PromiseComponent {
    doPromise = function (obj: any) {
        return new Promise(function (resolve2) {
            setTimeout(function () {
                resolve2({ num: 3113, obj: obj });
            }, 5000);
        });
    }
}

请点击:

  promiseVal = 0
  doMyPromise() {
    this.myPromise.doPromise(this).then(this.secondFunc);//UPDATED HERE
  }


//UPDATED HERE
  secondFunc = function (res) {
    this.promiseVal = res.num
  }

HTML:

 <div>{{promiseVal}} </div>
 <button (click)="doMyPromise()">Do Promise</button>

2 个答案:

答案 0 :(得分:1)

  

如您所知,异步编码的主要问题是丢失对当前对象的引用

这不是真的,箭头功能不绑定自己的this,因此您无需将this发送到doPromise

export class PromiseComponent {
  doPromise () {
    return new Promise(function (resolve) {
      setTimeout(function () {
        resolve({ num: 3113 })
      }, 5000)
    })
  }
}

promiseVal = 0
doMyPromise() {
  this.myPromise.doPromise()
    .then(res => {
      this.promiseVal = res.num
    })
}

答案 1 :(得分:1)

如果您想在组件中使用承诺:

promiseVal = 0
doMyPromise() {
  this.myPromise.doPromise().then((res) => {
    this.promiseVal = res.num
  });
}

我不知道你的服务背后的原因,但它通常是这样的(可选):

export class PromiseComponent {
    doPromise() { //This method will return a promise
        return new Promise(function (resolve2) {
            setTimeout(function () {
                resolve2({ num: 3113, obj: obj });
            }, 5000);
        });
    }
}

OP编辑帖子后:

你可以改变这个:

doMyPromise() {
    this.myPromise.doPromise(this).then(this.secondFunc);//UPDATED HERE
}

doMyPromise() {
    this.myPromise.doPromise(this).then(this.secondFunc.bind(this));//UPDATED HERE
}