モバイルコード/角度プロジェクトで作業しています。以下は、単純なサービスコールは、次のとおりです。非同期と同期の問題を約束します
this.getSomeData = function (businessId) {
var deferred = $q.defer();
var query = "SELECT * FROM Stuff";
$cordovaSQLite.execute(db, query).then(function (res) {
deferred.resolve(res.rows);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
};
問題は単純です:
for (var k = 0; k < count; k++) {
myService.getSomeData($scope.model.stuff[k].id, k).then(function (data) {
// whatever
}
);
getSomeData
は、それが返す時間によってので、for
サイクルのk
が正しいから遠い、非同期です。
私は、パラメータとしてサービスメソッドにk
を渡すと思った:
for (var k = 0; k < count; k++) {
myService.getSomeData($scope.model.stuff[k].id, k).then(function (data) {
// whatever
}
);
し、それに応じてサービスメソッドを変更:
this.getSomeData = function (id, index) {
var deferred = $q.defer();
var query = "SELECT * FROM Stuff";
$cordovaSQLite.execute(db, query).then(function (res) {
deferred.resolve(res.rows, index);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
};
しかし、二番目のパラメータは無視され、常に定義されていないされていることを。
これを解決するにはどうすればよいですか?
まず、(http://stackoverflow.com/q/23803743/1048572)[繰延アンチパターンを避ける] – Bergi
@JLRisheなぜあなたはこれを再度開くのですか? – Bergi
@Bergiあなたが指摘した質問は、この問題に対する答えではないためです。答えは '$ q.all()'です。 – JLRishe