我有一个数据应该是一致性。但是我每个循环。我不确定我放置resolve
,reject
位置正确。这是我的示例代码。
function getCount(content) {
var deferred = $q.defer();
db.transaction(function(tx){
tx.executeSql(
query,
[data],
function(tx, res) {
var count = res.rows.item(0).cnt;
if (count === 0) {
var commit = content.commit;
commit.forEach(function(entry) {
tx.executeSql(
query,
[data],
function(tx, res){
deferred.resolve(res); // here is right?
},
function (e) {
deferred.reject(e); // here is right?
}
);
});
}
else{
deferred.resolve(res);
}
},
function (e) {
deferred.reject(e);
}
);
});
}
我认为resolve
和reject
应该被调用一次,而不是在每个循环上,所以我对此版本进行了修改,这是对吗?谢谢您的帮助。
function getCount(content) {
var deferred = $q.defer();
db.transaction(function(tx){
tx.executeSql(
query,
[data],
function(tx, res) {
var count = res.rows.item(0).cnt;
if (count === 0) {
var commit = content.commit;
var status = true;
commit.forEach(function(entry) {
tx.executeSql(
query,
[data],
function(tx, res){},
function (e) {
status = false;
}
);
});
// here is right?
if (status) {
deferred.resolve(res);
}
else {
deferred.reject();
}
}
else{
deferred.resolve(res);
}
},
function (e) {
deferred.reject(e);
}
);
});
}
------------编辑------------------------
检查每个循环
function getCount(content) {
var deferred = $q.defer();
db.transaction(function(tx){
tx.executeSql(
query,
[data],
function(tx, res) {
var count = res.rows.item(0).cnt;
if (count === 0) {
var commit = content.commit;
var commit_index = 0;
commit.forEach(function(entry, index) {
tx.executeSql(
query,
[data],
function(tx, res){
commit_index++;
},
function (e) {}
);
if (index === (commit.length - 1)) {
if (commit_index === commit.length) {
deferred.resolve(res);
}
else {
deferred.reject(res);
}
}
});
}
else{
deferred.resolve(res);
}
},
function (e) {
deferred.reject(e);
}
);
});
}
是的解决方案和拒绝应被调用一次,而foreach循环是循环的Aync形式。所以你无法检查
` if (status) {
deferred.resolve(res);
}
else {
deferred.reject();
}`
因此,您必须在每个循环中解决或拒绝,但是当上次迭代到来时。当提交长度等于索引条目时,您可以在每个循环中检查最后一个迭代。