まず、AngularJSはangular.map
又はangular.reduce
、Array.prototype.map
とArray.prototype.reduce
AngularJSとほぼ無関係であるが含まれていないいます。
最新のブラウザでは、map
とreduce
の配列機能をサポートしています。 angular.forEach
は互換性のためです(IE8以前の場合)。 map/reduceを使用し、IE8以前をサポートしたい場合は、underscore.jsまたはlodashを試してください。
質問に戻ると、達成したいことに関する情報が不十分で、実際には変数As
とBs
とは何ですか?
のは、以下の仮定を作ってみましょう:
As
とBs
は両方As
のすべてのmemeberのために適切なJavaScriptの配列
- ている、あなたは、それを
doSomething
にしたいそれが行われるまで待機し、その後、すべてのでsomthingElse
を行いますメンバーがBs
の場合は、doSomething
- の結果をログに記録します。つまり、
somthingElse
As.length * Bs.length
回。
- 最初
- を行う必要がありますどの
As
メンバーこれはAs
メンバーがすべてのBs
の反復のために、あなたがいない、同様に一緒に
- 同時にを行うことでしょう意味気にしません最初に行われたケア
以下はコード、y
// We cannot bring 'this' into map function's scope, so assign it to 'self'
var self = this;
var promises = As.map(function(a){
return self.doSomething(a).then(function(resultOfA){
return $q.all(Bs.map(function(b){
return self.somthingElse(b).then(function(resultOfB){
console.log(resultOfA);
return resultOfB; // Not neccessary
});
}))
});
});
// Now if you want to do something after all those iterations, do it here:
$q.all(promises).then(function(){
// do something after all 'As.length * Bs.length' iterations are done
});
あなたは、彼らが非同期で実行されている暗示、resultOfA
のコンソールログランダム系列に表示されます。OUは角の$q
サービスが必要になります。後で使用するために実際の結果を取得したい場合は、代わりにこれを行うことができます。
// We cannot bring 'this' into map function's scope, so assign it to 'self'
var self = this;
var promises = As.map(function(a){
return self.doSomething(a).then(function(resultOfA){
return $q.all(Bs.map(self.somthingElse)).then(function(resultsOfB){
return {
resultOfA: resultOfA,
resultsOfB: resultsOfB
};
});
})
});
// Now if you want to do something after all those iterations, do it here:
$q.all(promises).then(function(resultsOfA){
// do something after all 'As.length * Bs.length' iterations are done
console.log(resultsOfA);
// Output would be something like:
// [{
// resultOfA: 'Result of A[0]',
// resultsOfB: ['Result of B[0]', 'Result of B[1]', 'Result of B[2]...']
// }, {
// resultOfA: 'Result of A[1]',
// resultsOfB: ['Result of B[0]', 'Result of B[1]', 'Result of B[2]...']
// }]
});
なぜ同期していますか?あなたは正確に何をしようとしていますか? – Phil
何か他に、データをDBサーバーにプッシュしています。私は、非同期の約束を通して並行処理の競合を避けたい。 –