HarmonyOS 鸿蒙Next 如何在for循环中调用await
HarmonyOS 鸿蒙Next 如何在for循环中调用await
我现在需要再for循环中进行插入db的操作,db 会爆出 Inner error. Inner code is -19 的问题,code为14800000。 查询资料分析后觉得可能因为第一次插入没结束,就循环到下一次进行第二次插入。 所以如何能在for循环中等待async方法的结束,再进行下一次循环?
2 回复
可通过async/await语法实现
参考示例
async queryData(){
{
if (this.rdbStore == null) {
console.error(Create Store1.db failed! store1 is null);
return;
}
}
try {
let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates(“EMPLOYEE”);
let resultSet = await this.rdbStore.query(predicates); // 查询所有数据
console.info(Query data successfully! row count:${resultSet.rowCount});
while (resultSet.goToNextRow()) {
const id = resultSet.getLong(resultSet.getColumnIndex(“ID”));
const name = resultSet.getString(resultSet.getColumnIndex(“NAME”));
const age = resultSet.getLong(resultSet.getColumnIndex(“AGE”));
const salary = resultSet.getDouble(resultSet.getColumnIndex(“SALARY”));
console.info(id=${id}, name=${name}, age=${age}, salary=${salary});
const tmp = new ItemBean(name, age.toString(), salary.toString());
this.dbSet.push(tmp);
}
resultSet.close();
} catch (err) {
console.error(Query data failed! err code:${err.code}, err message:${err.message})
}
}
在HarmonyOS鸿蒙Next中,await
关键字通常用于异步函数调用,它会暂停当前执行流直到异步操作完成。在 for
循环中调用 await
需要特别注意,因为每次调用 await
都会使循环等待该异步操作完成,这可能导致性能问题,尤其是在处理大量数据时。
为了确保 for
循环能正确且高效地处理异步操作,你可以使用以下几种方法:
-
直接调用:如果异步操作之间没有依赖关系,直接在
for
循环中调用await
是可行的,但需注意性能。 -
异步迭代:利用
for...of
循环和异步生成器(如果可用),可以更优雅地处理异步操作。 -
Promise.all:如果所有异步操作可以并行执行,可以先将所有异步操作放入数组,然后使用
Promise.all
等待所有操作完成。 -
forEach 与 async IIFE:使用立即执行异步函数表达式(IIFE)在
forEach
中包裹await
调用,但这并不改变循环的同步性质,仅允许在每次迭代中执行异步操作。
示例代码(直接调用 await
):
for (let i = 0; i < items.length; i++) {
await asyncFunction(items[i]);
}
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html