Domyślam się, że chcesz zrobić coś takiego (zwróć uwagę na niesprawdzony kod):
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);
}
Czy przeczytałeś ten artykuł o korzystaniu z kontraktów terminowych?
Kluczową kwestią jest to, że jeśli metoda jest asynchroniczna, a kod wywołujący musi czekać na jej zakończenie, musi zwrócić obiekt Future (lub w niektórych przypadkach Stream). W Dart nie ma możliwości, aby funkcja „zablokowała” oczekiwanie na wynik asynchroniczny. Zapraszam do zadawania dodatkowych pytań w komentarzach.