我目前有以下代码。
dbSetOrderTemplate(tx) {
tx.executeSql('SELECT * FROM dr_template_relational WHERE template_id = (?)', [this.state.currentTemplateId],
(trans, result) => {
let currentOption;
const resultValue = result.rows._array;
let categories = [];
resultValue.forEach(function (item, index) {
if(currentOption != item.categories_id) {
// looping through results to get each item in sqlite db
tx.executeSql('SELECT * FROM dr_report_categories WHERE id = (?)', [item.categories_id],
(transCat, catResult) => {
categories.push(catResult.rows._array[0].name);
});
console.log(categories);
}
currentOption = item.categories_id;
});
},
(err) => console.error(err)
);
}
上面的代码运行,并从本地sqlite数据库中选择一组项目。因此,在第一个'SELECT * FROM dr_template_relational WHERE template_id = (?)'
中,我选择一个数组,然后传递给const resultValue
。然后在resultValue上执行forEach循环遍历每个项目,然后我的目标是将其推入可变类别。
类别未插入。显然,范围存在问题,但我不知道为什么。
我声明:let categories = []
;然后我运行我的foreach,然后执行另一个名为tx.executeSql的函数。 tx.executeSql是Expo内部的一个本机反应方法。我希望category.push会推送到外部变量。
这有效,并为我提供了一个被推送的数组的console.log:
(transCat, catResult) => {
categories.push(catResult.rows._array[0].name);
console.log(categories);
}
但是如果我退出tx.executeSql方法:
tx.executeSql('SELECT * FROM dr_report_categories WHERE id = (?)', [item.categories_id],
(transCat, catResult) => {
categories.push(catResult.rows._array[0].name);
});
console.log(categories);
这显示console.log Array []
;
如果方法未读取类别,则类别应导致未定义的错误,不是吗?我无法弄清楚我在做什么错。请指教,谢谢!