我有一张从4个表中填充的记录。 关系是一对多,所以我需要执行4个select语句。
据我所知,db.executeSql和transaction.executeSql在获取结果之前返回。 因此,下面的代码可能无法正确执行,因为可能在获取第一个结果之前执行第二个选择。 因此,正确的方法是在第一个选择的成功函数中执行第二个选择,然后在第二个选择的成功函数中执行第三个选择等。
有更好的方法吗?
下面是一个代码示例:
getRecord: function(id) {
var me = this, record;
me.open();
me.db.executeSql('select * from mainRecord where id=?', [id], function(res) {
if (res.rows.length) {
record = new Test.model.MainRecord(res.rows.item(0));
}
});
me.db.executeSql('select * from subTable1 where recordID=?', [id], function(res) {
var arr = [];
for (var i=0;i<res.rows.length;i++) {
arr.push(res.rows.item(i));
}
// here record may be null as this function mau be executed before first select returns some result
record.set('subTable1', arr);
});
me.db.executeSql('select * from subTable2 where recordID=?', [id], function(res) {
var arr = [];
for (var i=0;i<res.rows.length;i++) {
arr.push(res.rows.item(i));
}
record.set('subTable2', arr);
});
}