我有一个服务,它会执行一个http请求来保存一些数据。当数据来自后端时,我正在对数据进行一些操作,然后将其返回,以便控制器可以使用它们。类似的东西:
public savePerson = (person: Model.IPerson): ng.IPromise<Model.IMiniPerson> => {
return this.api.persons.save({}, person).then((savedPerson) => {
this.enrichWithLookups(savedPerson);
var miniPerson = new Model.MiniPerson();
angular.extend(miniPerson, savedPerson);
miniPerson.afterLoad();
this.persons.unshift(miniPerson);
this.notifyOfChanges();
return miniPerson;
});
}
为了清理代码并使其更易于测试,我想将私有操作函数移除到装饰/拦截服务中。问题是我不知道如何在执行成功函数之前和返回之后挂钩promise数据。
例如,必须在数据到达后首先应用enrichWithLookups,而不是在返回miniPerson之后应用。
答案 0 :(得分:0)
您可以创建本地承诺并致电&#34;解决&#34;完成对http响应的操作时的方法。看看这里的代码:
public savePerson = (person: Model.IPerson): ng.IPromise<Model.IMiniPerson> => {
var waiter = $q.defer();
this.api.persons.save({}, person).then((savedPerson) => {
this.enrichWithLookups(savedPerson);
var miniPerson = new Model.MiniPerson();
angular.extend(miniPerson, savedPerson);
miniPerson.afterLoad();
this.persons.unshift(miniPerson);
this.notifyOfChanges();
waiter.resolve(miniPerson);
});
return waiter.promise;
}
我已直接使用angularjs编写代码,但我认为您可以根据自己的需要轻松调整代码。
再见。