Angular 如何在承诺的范围内正确使用我的应用程序代码?
我正在开发一个应用程序 网络使用Angular2。我正在使用Firebase实时数据库 对于实体“arbitro”,我实现了两个类: arbitro.component.ts,它管理实体和关联屏幕的逻辑 arbitro.service.ts,它在数据库上执行操作 在服务类中,我实现了以下方法,它在数据库中参数的节点上执行更新,并返回类型为Promise的元素 在component类中(从这里我调用update),我实现了如下所示的方法。调用服务的更新,然后我使用then和catch子句处理返回的承诺Angular 如何在承诺的范围内正确使用我的应用程序代码?,angular,firebase,firebase-realtime-database,promise,Angular,Firebase,Firebase Realtime Database,Promise,我正在开发一个应用程序 网络使用Angular2。我正在使用Firebase实时数据库 对于实体“arbitro”,我实现了两个类: arbitro.component.ts,它管理实体和关联屏幕的逻辑 arbitro.service.ts,它在数据库上执行操作 在服务类中,我实现了以下方法,它在数据库中参数的节点上执行更新,并返回类型为Promise的元素 在component类中(从这里我调用update),我实现了如下所示的方法。调用服务的更新,然后我使用then和catch子句处理返回的
- ArbitroSvc是arbitro.service.ts的一个实例
- 承诺是组件类的一个属性
- checkEdited是一个布尔属性,如果Promise抛出一个成功的响应,我想将其赋值为true
- 我在组件类中管理更新响应的方法正确吗
- 如果它是正确的,我得到的关于checkEdited的错误是什么?我如何避免它
谢谢 您遇到的问题是此的绑定。在内部函数中,它引用不同的值 您有三种选择:
此:
分配给临时变量(例如self
):
editArbitro(arbitro: Arbitro) {
return this.items.update(arbitro.id, arbitro);
}
this.promise = this.arbitroSvc.editArbitro(this.arbitro);
this.promise.then(function () {
console.log('Update completed successfully');
this.checkEdited = true;
}).catch(function (error) {
console.log('Update failed: ' + error);
});
this.promise = this.arbitroSvc.editArbitro(this.arbitro);
this.promise.then(() => {
console.log('Update completed successfully');
this.checkEdited = true;
}).catch(function (error) {
console.log('Update failed: ' + error);
});
let self = this;
this.promise = this.arbitroSvc.editArbitro(this.arbitro);
this.promise.then(() => {
console.log('Update completed successfully');
self.checkEdited = true;
}).catch(function (error) {
console.log('Update failed: ' + error);
});
this.promise = this.arbitroSvc.editArbitro(this.arbitro);
this.promise.then(() => {
console.log('Update completed successfully');
this.checkEdited = true;
}.bind(this)).catch(function (error) {
console.log('Update failed: ' + error);
});