Javascript AngularJs:$http.get请求在另一个$http.get请求中
我对AngularJS非常陌生,而且实际上对编程也比较陌生。基本上,我想从Javascript AngularJs:$http.get请求在另一个$http.get请求中,javascript,angularjs,http,jenkins,q,Javascript,Angularjs,Http,Jenkins,Q,我对AngularJS非常陌生,而且实际上对编程也比较陌生。基本上,我想从Jenkins请求JSONapi,以获得两个不同文件夹中正在运行的作业的列表。在这些数据中,有一个指向每个工作的url,我也想获取这些工作的数据。因此,我需要为每个作业执行另一个$http.get请求,将url(第一个请求的数据中的一个值)作为参数传递 最初,我有一个请求在另一个请求中,在两个循环中进行迭代 文件夹,以及每个文件夹中的 工作 在做了一些研究之后,我意识到由于$http请求是异步的,而循环是同步的,所以这种方
Jenkins
请求JSON
api,以获得两个不同文件夹中正在运行的作业的列表。在这些数据中,有一个指向每个工作的url,我也想获取这些工作的数据。因此,我需要为每个作业执行另一个$http.get
请求,将url(第一个请求的数据中的一个值)作为参数传递
最初,我有一个请求在另一个请求中,在两个循环中进行迭代
在做了一些研究之后,我意识到由于
$http
请求是异步的,而循环是同步的,所以这种方法是行不通的。所以我有一个服务,它使用$q
,收集第一个请求的承诺,但我不知道如何使用第一个请求的数据作为第二个请求的参数。有人能帮忙吗?对于异步请求,您应该使用异步瀑布
例如:
async.waterfall([
function(callback) {
callback(null, 'one', 'two');
},
function(arg1, arg2, callback) {
// arg1 now equals 'one' and arg2 now equals 'two'
callback(null, 'three');
},
function(arg1, callback) {
// arg1 now equals 'three'
callback(null, 'done');
}
], function (err, result) {
// result now equals 'done'
});
如果我理解正确的话,这也是我在过去几个月里必须学习的东西。基本上,这是:
requestFunction(...)
.then(function(response)
{
nextRequest(...).then(...);
}
);
通常为这种控制流实现catch
和finally
方法,称为promises。这是值得研究的;我个人无法忍受AngularJS,但了解它对我的日常工作很重要,这对我的日常工作非常重要。如果我站不住,你需要循环两次。因此,在第一个循环中,调用第一个请求。在这个请求的回调中,您可以为第二个循环输入代码
e、 g:
for(var i=0;i因此假设您有两个调用,a和b。它们都返回Jenkins作业列表。您可以使用承诺的数组对这些作业进行分组,然后使用$q.all(承诺)
对这些响应进行分组:
var jenkinsPromises = [];
// You could loop over this part if you have an array of calls for example.
jenkinsPromises.push($http.get{ // call folder one });
jenkinsPromises.push($http.get{ // call folder two });
// Now wait for all calls to finish and iterate over their responses.
$q.all(jenkinsPromises).then(function (jenkinsResponses) {
// jenkinsResponses is an array with objects
// each object being a response from Jenkins
}
在上面的示例中,jenkinsResponses
,您将发现对Jenkins的“第一层”调用的组合结果。该数组包含响应对象,正如您所说,这些对象包含您需要调用的URL
使用与上面相同的练习,您可以在promise数组中对调用进行分组
。然后我们再次使用$q.all()
对它们的响应进行分组
$q.all(jenkinsPromises).then(function (jenkinsResponses) {
var i, j, current, urlPromises = [];
for (i = 0, j = jenkinsResponses.length; i < j; i++) {
current = jenkinsResponses[i];
// Push the call to the urlPromises array.
// Note that this is a dummy call.
urlPromises.push($http.get{ current.url] };
}
$q.all(urlPromises).then(function (urlResponses) {
// urlResponses contains a result of all calls to the urls.
}
}
$q.all(詹金斯承诺)。然后(函数(詹金斯响应){
var i,j,当前,UrlPromissions=[];
对于(i=0,j=1.length;i
无需为此引入另一个库。$q
在您的第一个代码块中已经构建了此功能,承诺。push
是詹金斯承诺。push
?正确,我在稍后阶段更改了名称,我的坏!
$q.all(jenkinsPromises).then(function (jenkinsResponses) {
var i, j, current, urlPromises = [];
for (i = 0, j = jenkinsResponses.length; i < j; i++) {
current = jenkinsResponses[i];
// Push the call to the urlPromises array.
// Note that this is a dummy call.
urlPromises.push($http.get{ current.url] };
}
$q.all(urlPromises).then(function (urlResponses) {
// urlResponses contains a result of all calls to the urls.
}
}