mysql - sqljocky同步查询数据库

标签 mysql dart

我正在尝试使用 sqljocky 同步查询 MySQL 数据库。我有一个 Load 类,它运行查询并获取数据,然后将数据导入到 User 对象中。我遇到的问题是运行查询的 Future 没有及时返回以将对象返回到调用方法。

DataObject user = new DataObject();
user.Get(1234);
// I cannot do anything here because the returned object is null
user.somethingElse();

DataObject Get(String ID){
  return access.Load(this, ID);
}

// Runs query
Load(DataObject object, String ID){
  // Set up query
  String query = 'select * from users where ID = \'' + ID + '\'';
  // Run query
  var completer = new Completer.sync();
  pool.query(query).then((result) {
    result.listen((row) {
      // Import into object
      object.Import(row);
    }, onDone: () {
      completer.complete(object);
    });
  });
}

最佳答案

我的猜测是你想做这样的事情(注意未经测试的代码):

Future<DBObject> load(DBObject object, String id) {
   var query = "select ... where id='$id'"; // Note: check for SQL injection.
   return pool.query(query)
    .then((result) => result.toList())
    .then((list) => list.forEach((row) => object.import(row)))
    .then((_) => object);
}

你读过这篇文章吗article关于使用 future ?

关键点是,如果一个方法是异步的,并且调用代码需要等待它完成,那么它必须返回一个 Future 对象(或者在某些情况下返回一个 Stream)。 Dart 中没有办法让函数“阻塞”等待异步结果。欢迎在评论中提出更多问题。

关于mysql - sqljocky同步查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411171/

相关文章:

flutter - 我试图将object.parameter传递到自定义小部件中并失败

android - 更新包后 Flutter Android 构建失败。安卓X错误

regex - dart 支持 perl 风格的正则表达式和匹配运算符语法吗?

dart - 带有右边框的圆角卡片小部件 flutter

firebase - Flutter:Firebase 如何更改查询和内容

php - 不使用 PDO 创建表

mysql - 内连接与计数

php - Laravel(或 PHP/MySQL?)在小数点后削减 float

Mysql查询在qt中不起作用

mysql - SQL 中的自然排序不起作用