在我的情况下,如何发出多个http请求
How to make multiple http requests in my case?
我正在尝试使用工厂对象来发出多个http请求。我有类似的东西
angular.module('App').factory('myFactory', function($http, $q) {
var service = {};
service.setProduct = function(productObj) {
_productObj = productObj;
}
service.makeRequest = function() {
var deferred = $q.defer();
$http.post('/api/product', _productObj).success(function(data){
var id = data.id
//I am not sure how to chain multiple calls by using promise.
//$http.post('/api/details/, id).success(function(data) {
// console.log(data)
//}
deferred.resolve(data);
}).error(function() {
deferred.reject('error here');
})
return deferred.promise;
}
return service;
});
angular.module('App').controller('productCtrl', ['$scope','$http','myFactory',
function($scope, $http, myFactory) {
myFactory.setProduct(productObj);
myFactory.makeRequest()
.then(function(data) {
console.log(data)
}, function(data) {
alert(data)
})
}
]);
我可以使用myfactory.makeRequest()进行一次调用,但不知道如何链接多个http请求。有人能帮帮我吗?谢谢
如果需要进行顺序请求,则需要连锁promise。你甚至不需要创建自己的deferred
对象——$http.post
已经返回了一个promise,所以你可以只创建.then
return $http.get("url1")
.then(function(response){
var nextUrl = response.data;
return $http.get(nextUrl);
})
.then(function(response){
var nextUrl = response.data;
return $http.get(nextUrl);
})
.then(function(response){
return response.data;
});
.success
用于更传统的非承诺方法
这是一个灌篮器。
阅读承诺。请记住JS是异步的。您需要在回调中进行下一次服务器调用(第一个.then函数)。
相关文章:
- Meteor如何接收HTTP请求
- 在我的情况下,如何进行http请求
- 使用插件收听Firefox标签的http请求
- http请求使用html而不是json进行响应
- 在node-js路由中发出http请求
- 是否可以在没有HTTP请求或<输入>
- Acync JS HTTP请求通知请求
- PhantomJs在控制台中发出http请求时不会返回任何状态
- PHP处理来自一个页面的http请求,并将其显示在另一个页面上
- Firefox插件-如何发出http请求
- 验收测试主要针对传出的http请求
- 验证HTTP请求来自NFC标签上的点击
- 如何制作'http请求'在Node js中同步
- 为什么我在Cloud9中的http请求总是返回错误
- AngularJS Typeahead和$http请求限制
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- 如何使用Chrome扩展API获取网页的所有HTTP请求
- 将http请求中的数据传递给C#控制器
- 在初始化路由之前发送$http请求
- 从客户端捕获 HTTP 请求(包括 ajax)