我有一个数据应该保持一致性。但我有一个每个循环。我不确定我放置的 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);
}
);
});
}
最佳答案
是的,resolve和reject应该调用一次,forEach循环是aync形式的循环。所以你无法检查
` if (status) {
deferred.resolve(res);
}
else {
deferred.reject();
}`
所以你必须在每个循环中解决或拒绝,但当最后一次迭代到来时。当提交长度等于indexOf条目时,您可以检查每个循环中的最后一次迭代。
关于javascript - 关于 AngularJS 延迟解析位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134346/