【发布时间】:2020-05-10 09:44:28
【问题描述】:
将达到以下方法。但是这 3 个日志语句都不会被触发。
void readAndExecute(String sql, 列表参数, CallbackOnSingleRow onSingleRow) 异步 { _lastResults = null; await _dbConnection.query(sql, parameters).then((Results result) { _logger.log('发现了什么', LEVEL_FINE); for (var row in result) { _lastResults ??= 结果; onSingleRow(行); } }).catchError((错误) { _logger.error('读取失败:$error\n$sql'); throw DbException('readAndExecute()', sql, parameters, error.toString()); }); _logger.log('readAndExecute() 已到达', LEVEL_FINE); }- _dbConnection 是一个有效的 MySqlConnection 实例(成功登录)
- sql 是有效的 SQL 语句(使用 DB 工具测试):
- sql: select * from users where user_id > ?;
- 参数:[0]
- 数据包mysql1的日志被激活,输出为:
恐怕我对“async-await”的概念有些理解。
回答1后代码改为:
尝试 { _lastResults = 等待 _dbConnection.query(sql, 参数); _logger.log('达到结果', LEVEL_FINE); for(_lastResults 中的 var 行){ onSingleRow(行); } } 捕捉(除外){ _logger.error('readAndExecute(): $exc\n$sql'); }但问题仍然存在:2 个日志将无法到达。
【问题讨论】:
-
您可以使用
await并将返回值存储为变量,或者使用.then()并使用您在then中获得的值执行一个函数。我看不出你同时给他们两个打电话的意义 -
你说得对,那是我的误解。 await 变体符合我的要求。
-
我改了代码,问题依旧。
-
在
await行上方放置一个记录器,看看它是否打印 -
await 上方的日志语句可以正常工作。
标签: dart async-await