如何异步执行此操作,打印console.log(“PRINT THIS,所有循环完成后”)
我每个人都在forEach。
InsertService不会返回任何值,我只想在此处插入。
我不知道如何申请$ q和$ q.all。请帮助。
angular.forEach(MAIN, function (value, key) {
//#1
SelectService1.SelectID(value.id).then(function (res) {
angular.forEach(res, function (value, key) {
InsertService1.Insert(value).then(function (res) {
console.log("NEW INSERTED Service 1!");
},
function (err) {
});
});
},
function (err) {
});
//#2
SelectService2.SelectID(value.id).then(function (res) {
angular.forEach(res, function (value, key) {
InsertService2.Insert(value).then(function (res) {
console.log("NEW INSERTED Service 2!");
},
function (err) {
});
});
},
function (err) {
});
//#3
SelectService3.SelectID(value.id).then(function (res) {
angular.forEach(res, function (value, key) {
InsertService3.Insert(value).then(function (res) {
console.log("NEW INSERTED Service 3!");
},
function (err) {
});
});
},
function (err) {
});
});
//
console.log("PRINT THIS, AFTER ALL LOOP IS DONE");
}
答案 0 :(得分:1)
如果Insert()返回一个promise,你可以这样做:
var inserts = [];
inserts.push(InsertService1.Insert(value));
inserts.push(InsertService2.Insert(value));
inserts.push(InsertService3.Insert(value));
$q.all(inserts).then(()=>{/*once all have finished*/});
答案 1 :(得分:1)
如果每个InsertService.Insert(value)
都返回承诺,
你可以用这个
var res1 = InsertService1.Insert(value).then( function (res) {
console.log("NEW INSERTED Service 1!");
}, function (err) {
console.log("error here");
});
var res2 = InsertService2.Insert(value).then( function (res) {
console.log("NEW INSERTED service 2 !");
}, function (err) {
console.log("error here");
});
var res3 = InsertService3.Insert(value).then( function (res) {
console.log("NEW INSERTED service 3");
}, function (err) {
console.log("error here");
});
$q.all([res1, res2, re3]).then(function(results){
console.log(results[0]); // this returns promise of res1;
console.log(results[1]); // this returns promise of res2;
console.log(results[2]); // this returns promise of res3;
console.log("PRINT THIS, AFTER ALL LOOP IS DONE");
});
试试这个:)
修改
我不确定我理解的是你想要的,这里是一个示例代码。
function fnOne(param1, param2, ...) {
return $q(function (resolve, reject) {
// you can do anything what you want in here
// and just put success value or error value in resolve or reject
if(success){
// result of your code is successful
resolve(success value); // this success value will call in $q.all();
} else {
// result of your code is failed
reject(failed value);
}
});
}
并制作fnTwo
,fnThree
,......如上所述。
然后您可以使用$ q.all,如下所示。
$q.all([
fnOne(
param1,
param2,
...
),
fnTwo(
param1,
param2,
...
),
...
]).then(function (response) {
// response[0] returns promise of fnOne()
// response[1] returns promise of fnTwo()
....
console.log("PRINT THIS, AFTER ALL LOOP IS DONE");
});
执行then
数组的所有函数后,$q.all
执行{p> $q.all
。
你可以打印"打印这个,在所有循环完成后#34;在所有功能完成自己的工作之后。
也许这可以帮助你。