Angularjs 如何执行父级&;按顺序的子请求
如何将子请求添加到promise数组。我需要同步执行多个ajax请求 在谷歌上,我学会了如何使用Angularjs 如何执行父级&;按顺序的子请求,angularjs,ajax,angular-promise,Angularjs,Ajax,Angular Promise,如何将子请求添加到promise数组。我需要同步执行多个ajax请求 在谷歌上,我学会了如何使用$q function _SearchData() { var promises = []; var callbackFunc = function(data) { dataService.get("https://childrequest").then(function(data) { console.log('inner ' + i)
$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) {
})
};
但我希望执行请求的是
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) {
});}
函数_SearchData(){
var承诺=[];
var callbackFunc=函数(数据){
utilService.test(“https://parentrequeste)然后(函数(数据){
if(data.entity==“Parent”)//第一次检查
{
控制台日志(“外部”+i);
if(data.id>0)//第二次检查{
utilService.get(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
})
}
其他的
{
utilService.create(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
});
}
}});});}
对于(变量i=0;i<5;i++){
承诺推送(callbackFunc);
}
$q.all(承诺)。然后(函数(完成){
});}
始终在每个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);
}
函数_SearchData(){
var承诺=[];
对于(变量i=0;i<5;i++){
var p=dataService.get(“https://parentrequest)然后(函数(){
//返回这里:
返回dataService.get(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
return data;//这里有一个return
});
});
承诺推送(p);
}
返回承诺。全部(承诺);
}
//更新(添加一些条件):
函数_SearchData(){
var承诺=[];
对于(var i=0;i<5;i++){
var p=utilService.test(“https://parentrequeste)然后(函数(数据){
如果(data.entity==“父级”){
控制台日志(“外部”+i);
如果(data.id>0){
返回utilService.get(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
返回数据;
})
}否则{
返回utilService.create(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
返回数据;
});
}
}
返回null;
});
承诺推送(p);
}
返回承诺。全部(承诺);
}
您可以这样做以获得所需的输出模式
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);
工作演示:如果我有一些情况,我应该把它放在哪里,请检查这个链接,否则{…return dataService.create(“(数据){我已经在帖子中添加了检查。你能检查并更新ans吗谢谢,伙计,我正在检查。同时,我对你的ans进行了升级:)
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);
}
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);