【发布时间】:2023-03-11 06:08:01
【问题描述】:
我无法确定 $http 中角度的成功和错误回调以及 Promise 的“then”部分。 $http 服务返回一个承诺。 “成功”回调是“那么”的一个例子吗? 如果我将 $http 放在自己的服务中怎么办?我该怎么做?
我认为代码更容易显示我的问题:
app.controller('MainCtrl', function ($scope, $log, BooksService) {
BooksService.retrieveAllBooks().then(function(results) {
$scope.allBooks = results;
});
});
app.factory('BooksService', function($http,$log) {
var service = {
retrieveAllBooks: function() {
return $http({
method: 'GET','https://hugebookstore.org/allbooks'
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
}
}).success(function(data, status, headers, config) {
var allbooks = transformDataIntoBooksArray(data);//this function exists and just takes raw data and turns them into Book objects
return allbooks;/*how is this "success" callback related to the "then"() callback in app.controller above?*/
};
}).error(function(data, status, headers, config) {
$log.error('here is an error'+data + status + headers + config);
});
}
};
return service;
});
关于app.controller代码的问题:
我需要在app.controller? 中使用"then()" 函数吗
我只想让我的控制器使用BooksService 为我获取所有书籍的列表。 BooksService 已经有一个“then”类型的子句,即“success”回调。好像我有一个不必要的“then”。真的吗?
另外,什么时候调用“then”,我可以在then's回调函数的参数中添加任何内容吗?
我不明白默认提供了哪些参数以及我可以添加什么。
关于app.factory代码的问题:
首先,这就是我理解的代码要做的事情。
我正在使用 factory() 方法而不是 Angular 中可用的 service() 方法创建一个 BooksService。
我正在定义一个名为retrieveAllBooks() 的函数,它在后台使用$http 在Angular 中发出异步GET 请求,它本身就是一项服务。 RetrieveAllBooks() 只不过是 $http GET 服务的一个包装器,它使客户可以轻松地调用 BooksService.retrieveAllBooks() 并获得一系列 Book 对象。
“success”回调何时执行,它与我的app.controller? 中的“then”回调有什么关系
我的success() 回调中的return 值似乎不会返回到app.controller。为什么?
我怎样才能将 allbooks 数组返回到 app.controller,它最初称为 BooksService.retrieveAllBooks()?
success 回调中是否允许使用其他参数?
我需要从retrieveAllBooks() 函数定义中返回什么?我是单独返回 $http promise,还是需要同时从成功和 error 回调中返回 return?
我知道这是冗长的,但我希望有人可以帮助我,b/c 这是模式——将我的网络调用分离到它自己的service 层,而不是直接在我的@987654351 中调用 $http @层,将一遍又一遍地完成。
谢谢!!
【问题讨论】:
标签: javascript angularjs http service promise