我想知道绑定结果的最佳方法,这是使用角度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>
答案 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
}