所以我已经简化了这个服务,但是我正在努力尝试更好地理解已编写的代码。
下面的模仿服务:
angular.module('test').service("giftCardService", ['$http', '$q', function($http, $q) {
function test (callback) {
return myGet('htpp://localhost:7001/getGiftCards/', publishEventMapper());
};
function myGet(url, f) {
return $http.get('http://localhost:7001/getGiftCards/').then(messageHandler).then(f, processErrors);
};
function processErrors(errorResponse) {
console.log('inside processErrors');
return $q(function(resolve, reject) {
reject(processMessages(errorResponse));
});
}
function processMessages(data) {
console.log('inside processMessages');
return {
messages: 'Messages returned'
}
}
function messageHandler(data) {
console.log('inside messageHandler');
return $q(function (resolve) {
console.log('the data', data);
resolve(data);
});
}
function publishEventMapper () {
console.log('publishEventMapper fired');
return function (response) {
mapResponse(response.id);
return [
{
id: 123
}
];
}
};
function mapResponse (items) {
console.log('mapResponse fired');
}
return {
test: test
}
}]);
正如你所知......在真实项目中,test()之后的所有代码实际上都在另一个服务中,并且在我尝试学习什么时候发生的事情我只是在一个文件中重新创建它以使它更容易透视。
在publishEventMapper函数中,它返回一个匿名函数,该函数传递响应,该函数也返回一些其他对象。
我的问题是:
调用publishEventMapper中的这个匿名函数在哪里。我只是看不出它是如何工作的。有人可以像3岁那样向我解释。
另外 - 这些代码中的一些看起来有点回调地狱般吗?我正在查看许多具有函数的类似函数调用另一个函数然后返回需要解析和返回的promise。它使我的头旋转了一点。