所以我有一个服务电话到后端并保存一个对象,该呼叫设置了一个承诺来返回一个号码。
该调用看起来像这样
saveTcTemplate(item: ITermsConditionsTemplate): ng.IPromise<number> {
item.modifiedDate = new Date();
return this.$http.post(this.api + '/SaveTcTemplate', item)
.then(this.returnData);
}
returnData = (response: any) => {
return response.data;
};
这是在创建新对象时,所有字段都设置为所需的值,传递给保存,然后调用以显示。
这是用于在保存对象后拉动对象的get函数。
getTermsConditions(id: number): ng.IPromise<ITermsConditionsTemplate> {
return this.$http.get(this.api + '/GetTermsConditions',
{
params: {
id: id
}
}).then(this.returnData);
}
这是对象的初始构建,保存和获取
this.newTemplate.copyId = 0;
this.newTemplate.id = 0;
this.newTemplate.isLibrary = true;
this.newTemplate.studyFacilityScheduleId = this.studyFacilityScheduleId;
this.studyTermsConditionsService.saveTcTemplate(this.newTemplate)
.then(this.studyTermsConditionsService.getTermsConditions)
.then(this.setTemplateData);
设置完成后,我可以成功保存新项目,并将其ID(ng.IPromise部分)返回给我,并传递给我的Get服务电话。
问题是,当以这种方式设置时,这个。$ http.get返回undefined。从我认为我理解的其他类似的堆栈溢出问题来看,它正在发生,因为我调用函数时没有明确地将任何内容传递给它的参数当我说
.then(this.studyTermsConditionsService.getTermsConditions)
为了测试这个我还设置了保存并得到这样的
var data: any;
data = this.studyTermsConditionsService.saveTcTemplate(this.newTemplate);
this.studyTermsConditionsService.getTermsConditions(data)
.then(this.setTemplateData);
这种方法有点奏效。 $ http.Get被识别,可以使用,但这个设置的问题是;由于ng.IPromise的异步性质,数据未作为承诺的数值发送到我的Get函数。它被发送为类型$$ promise,导致我的get函数中的参数为NaN。
所以有一种方法我传递一个可用的值,即32,但是我没有显式传递这个值,所以$ http.get是未定义的。
另一方面,我显式传递了一个参数,因此$ http.get被识别并可用,但显式调用的参数是$$ promise类型,而不是类型编号,不幸的是,似乎ng.IPromise&lt; ;数字&gt;我没有通过调用我的Get函数解决问题。
我如何从这里开始?
答案 0 :(得分:2)
我猜你被this
搞砸了。当您直接将函数引用作为参数传递时,它将与上下文一起丢失。你应该像下面这样明确地调用它们。
<强>代码强>
this.newTemplate.copyId = 0;
this.newTemplate.id = 0;
this.newTemplate.isLibrary = true;
this.newTemplate.studyFacilityScheduleId = this.studyFacilityScheduleId;
this.studyTermsConditionsService.saveTcTemplate((response) => this.newTemplate(response))
.then((response) => this.studyTermsConditionsService.getTermsConditions(response))
.then((response) => this.setTemplateData(response));
否则,您可以让function
使用arrow function
,这有助于功能内的this
上下文。
saveTcTemplate(item: ITermsConditionsTemplate): ng.IPromise<number> { .. }
应该是
saveTcTemplate = (item: ITermsConditionsTemplate): ng.IPromise<number> => { .. }
和
getTermsConditions(id: number): ng.IPromise<ITermsConditionsTemplate> { .. }
应该是
getTermsConditions = (id: number): ng.IPromise<ITermsConditionsTemplate> => { .. }