我正在尝试使用angular更改请求正文进行连续发布请求。原因是我有一个REST API,我打电话来创建用户,但它需要一些时间来返回。我基本上想要批量发送请求,本质上只是调用相同的端点,只是不同的请求体。我已经看到了关于顺序调用函数的其他问题,但它们似乎总是一组执行不同功能的函数。我不能在这里明显递归我的大脑。
到目前为止,我有这个函数返回了promise但我不知道如何编写递归来调用这个函数来遍历所有$ scope.csvResults。
$scope.importUsersPromise = function(currentIndex, step) {
var nextInput = $scope.csvResults.slice(currentIndex, currentIndex+step);
var requestBodyUsers = {
"mode": "SCRIPT",
"inputParams": [
JSON.stringify(nextInput)
]
};
return $http({
method: 'POST',
url: api_url + "v1/serverAction/",
headers: {
"Authorization":"user",
"Content-Type":"application/json"
},
requestBodyUsers
});
};
答案 0 :(得分:0)
假设您有一个包含所有不同请求主体的数组users
。然后你做这样的事情:
var users = [/* your request bodies */];
var errors = [/* will store the errors */];
// make the first api call
var promise = apiCall(users[0]);
// use .reduce to chain all requests
promise = users.slice(1).reduce(function(promise, user){
return promise.then(apiCall.bind(null, user));
}, promise);
promise
.then(function(){
// do something when all users are inserted
})
.finally(function(){
// do something when all requests are done
// even if some of them have failed
console.log(errors);
})
function apiCall(user) {
return $http({... })
}
您必须记住,如果其中一个请求失败,则链断开,并且不会发送以下请求。如果您想要发送它们,您应该使用.finally
和.catch
来收集错误:
// use .reduce to chain all requests
promise = users.slice(1).reduce(function(promise, user){
return promise
.catch(err => errors.push(err)) // fail handler (optional)
.finally(apiCall.bind(null, user)); // always make the next api call
}, promise);
如果不是,我们最好检查一下angular's documentation;)
答案 1 :(得分:0)
您可以将所有请求集放在 requestArray 。
中请查看this链接。