我要进行一组相当复杂的API调用,并且我尝试尽可能地做到优雅和高效。我了解如何使用服务的promise api
$http
来链接请求,以及如何使用$q
服务并行进行请求。但是对于此特定的API工作流程,我需要同时进行。
这是高级API流程的示例:
/dog/<dog_id>
/breed/<breed_id>
/food/<food_id>
/cat/<cat_id>
/turkey/<turkey_id>
/fish/<fish_id>
第一层请求均具有已知ID。然而,<breed_id>
需要使/breed
呼叫必须从解析/dog
响应,并<food_id>
作出必要的/food
呼叫必须从解析/breed
响应。因此/dog
,/breed
和/food
都需要链接起来。但是/cat
,/turkey
和/fish
可以与整个/dog
链条平行。
我现在所拥有的(并且工作正常)是两组独立的请求。我如何改善这一流程?有没有一种方法可以将两个堆栈组合在一起,从而导致一个单次执行Promise
.then()
?
var dogId = '472053',
catId = '840385',
turkeyId = '240987',
fishId = '510412';
var myData = {};
var firstSetComplete = false,
secondSetComplete = false,
returnData = function() {
if (firstSetComplete && secondSetComplete) {
console.log("myData.dog", myData.dog);
console.log("myData.dog.breed", myData.dog.breed);
console.log("myData.dog.food", myData.dog.food);
console.log("myData.cat", myData.cat);
console.log("myData.turkey", myData.turkey);
console.log("myData.fish", myData.fish);
}
};
// first call set
$http.get('http://example.com/dog/' + dogId)
.then(function(response) {
myData.dog = response.data;
return $http.get('http://example.com/breed/' + response.data.breed_id);
})
.then(function(response) {
myData.dog.breed = response.data;
return $http.get('http://example.com/food/' + response.data.food_id);
})
.then(function(response) {
myData.dog.food = response.data;
firstSetComplete = true;
returnData();
});
// second call set
$q.all([
$http.get('http://example.com/cat/' + catId),
$http.get('http://example.com/turkey/' + turkeyId),
$http.get('http://example.com/fish/' + fishId)
])
.then(function(responses) {
myData.cat = responses[0].data;
myData.turkey = responses[1].data;
myData.fish = responses[2].data;
secondSetComplete = true;
returnData();
});
您可以像这样传递第一个链:
$q.all([
$http.get('http://example.com/cat/' + catId),
$http.get('http://example.com/turkey/' + turkeyId),
$http.get('http://example.com/fish/' + fishId),
$http.get('http://example.com/dog/' + dogId)
.then(function(response) {
myData.dog = response.data;
return $http.get('http://example.com/breed/' + response.data.breed_id);
})
.then(function(response) {
myData.dog.breed = response.data;
return $http.get('http://example.com/food/' + response.data.food_id);
})
.then(function(response) {
myData.dog.food = response.data;
return myData;
})
])
.then(function(responses) {
myData.cat = responses[0].data;
myData.turkey = responses[1].data;
myData.fish = responses[2].data;
secondSetComplete = true;
returnData();
});
对狗的那条大保证书最终会返回一个单独的保证书,当最后一个then
被调用时,它会被解决,并由最终功能的结果来解决。因此,没有理由不能将其嵌套在$q.all()
呼叫中。
我希望能够删除警报,但前提是此警报未分配给用户。为此,我需要获取我的用户列表,并检查是否没有用户分配了此警报。我通过将2个请求与可观察对象链接,成功地实现了这一点,但有更好的方法实现吗?
我有一个Quarkus应用程序,它读取一个文件并发送请求(到另一个Quarkus微服务)。目前,我为文件的每一行发送一个请求。但这个过程花了这么长时间因为我有上千行。 我读过关于Vert.x的文章,我得到了一个对API的异步请求,这要感谢这个链接: https://quarkus.io/blog/mutiny-concurrent-uni/ 但我的问题是,我必须将请求的响应保存到一个数组中,最后保
我试图用相同的观察者观察两个请求。我的: 我的请求是使用Reformation 2构建的登录请求: 现在我想启动2个或更多请求并在中逐个检查响应,当检查最后一个请求时,使用我的执行。有人能帮我吗? 提前致谢。
我的后端应用程序在Spring启动和SSL保护。我用的是OAuth2脸书登录。也是Angular 7中的前端应用程序,并由SSL保护。我的问题是向我的Spring boot应用程序发送Angular请求。所有应用程序都是HTTPS。 附言。如果我将url添加到websecurity.Iglishing()中,所有工作都正常。也不安全我的后端。我认为安全和HTTPS请求有一些问题。多谢帮忙。
问题内容: 所以我刚才正在使用jQuery的.load(),看来我们无法配置`$(“#example”).load(‘./uri.ext `$(“#example”).load(‘./uri.ext #ID1’).load(‘./uri.ext #ID2’).load(‘./uri.ext ID3’)` 如果我们具有DIV的模板文件或用于动态构建页面的文件,而不将HTML存储在字符串变量中或沿这些