在移動cordova /角項目上工作。下面是一個簡單的服務電話:承諾與異步和同步問題 - 角
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