如何将子请求添加到promise数组。我需要同步执行mutliple ajax请求。
在谷歌搜索中,我开始知道如何使用$q
。
function _SearchData() {
var promises = [];
var callbackFunc = function(data) {
dataService.get("https://childrequest").then(function(data) {
console.log('inner ' + i);
});
}
for (var i = 0; i < 5; i++) {
promises.push(dataService.get("https://parentrequest").then(callbackFunc));
}
$q.all(promises).then(function(done) {
})
};
这确保https://parentrequest
在序列中执行,但https://childrequest
仍未按顺序执行。
这会将输出呈现为
Parent #0
Parent #1
Parent #2
Parent #3
Parent #4
Child #0
Child #1
Child #3
Child #2
Child #4
Child #5
但我想要执行请求的是
Parent #0
Child #0
Parent #1
Child #1
Parent #2
Child #2
Parent #3
Child #3
Parent #4
Child #4
Parent #5
Child #5
展望未来,我尝试了以下方法但仍然似乎没有渲染
function _SearchData() {
var promises = [];
var callbackFunc = function(data) {
utilService.test("https://parentrequeste").then(function(data) {
if(data.entity == "Parent") //first check
{
console.log("outer " + i);
if(data.id > 0) // second check{
utilService.get("https://childrequest").then(function(data) {
console.log('inner ' + i);
})
}
else
{
utilService.create("https://childrequest").then(function(data) {
console.log('inner ' + i);
});
}
}});});}
for (var i = 0; i < 5; i++) {
promises.push(callbackFunc);
}
$q.all(promises).then(function(done) {
});}
任何帮助/建议都非常感谢。
答案 0 :(得分:1)
始终在每个promise回调函数中返回一些内容
试试这个:
function _SearchData() {
var promises = [];
for (var i = 0 ; i < 5; i++) {
var p = dataService.get("https://parentrequest").then(function() {
// A return here:
return dataService.get("https://childrequest").then(function (data) {
console.log('inner ' + i);
return data; // A return here
});
});
promises.push(p);
}
return Promise.all(promises);
}
//更新(添加一些条件):
function _SearchData() {
var promises = [];
for (var i = 0 ; i < 5; i++) {
var p = utilService.test("https://parentrequeste").then(function(data) {
if(data.entity == "Parent") {
console.log("outer " + i);
if(data.id > 0) {
return utilService.get("https://childrequest").then(function(data) {
console.log('inner ' + i);
return data;
})
} else {
return utilService.create("https://childrequest").then(function(data) {
console.log('inner ' + i);
return data;
});
}
}
return null;
});
promises.push(p);
}
return Promise.all(promises);
}
答案 1 :(得分:0)
你可以做这样的事情来获得所需的输出模式。
function callParent(i, n) {
if (i > n) {
return;
}
console.log("call" + i);
parent().then(function() {
callParent(++i, n);
})
}
function child() {
var defer = $q.defer();
$http.get("https://childrequest").then(function(res1) {
console.log("Got child data");
defer.resolve("Got child data");
})
return defer.promise;
}
function parent() {
var defer = $q.defer();
$http.get("https://parentrequest").then(function(res1) {
console.log("Got Parent data");
child().then(function() {
defer.resolve("Got Parent data");
})
})
return defer.promise;
}
var n = 10;
callParent(1, n);