如何向promise数组添加子请求。我需要同时执行多个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) {
});}发布于 2017-07-17 17:40:32
始终在每个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);
}// Update (添加一些条件):
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);
}发布于 2017-07-17 18:45:29
您可以这样做,以获得所需的输出模式。
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);工作演示:http://jsfiddle.net/rmu6wuo8/1/
https://stackoverflow.com/questions/45140460
复制相似问题