Dart 如何在没有'的情况下等待未来的完成;异步';

Dart 如何在没有'的情况下等待未来的完成;异步';,dart,Dart,如果没有“异步”和“未来”,如何等待未来的完成 在我使用的库中,所有函数都是异步的 // must return <bool> bool my_func(int x){ //returns Future<int> var tmp = somelib.somefunc( ... ); //wait y return x == y; } Dart虚拟机版本:1.24.3(2017年12月18日星期一16:57:48)在“linux_x64”

如果没有“异步”和“未来”,如何等待未来的完成

在我使用的库中,所有函数都是异步的

// must return <bool>
bool my_func(int x){

          //returns Future<int>
  var tmp = somelib.somefunc( ... );
  //wait y
  return x == y;
}

Dart虚拟机版本:1.24.3(2017年12月18日星期一16:57:48)在“linux_x64”上

一个同步函数,或者实际上是任何Dart函数,在调用它们时立即返回一个值。如果您想立即返回一个布尔值,并且该布尔值取决于某个将来完成的结果,则无法及时计算该布尔值

如果您需要等待未来,那么您的函数是异步的。您需要立即返回一些内容,即使您还不知道结果。这就是未来。它在任何方面都不是神奇的,它只是一个对象,您可以设置一个回调,当某个结果准备好时,将对其进行调用

因此,您需要返回一个
Future
,以使其正常工作


省道是单螺纹的。如果不使用隔离,就没有并发性。相反,异步函数通过轮流工作,为其他代码提供运行时间,例如,当它们等待未来时。如果您只是在(!completed)时执行
do{}
则没有其他代码可以运行,这意味着没有任何东西能够将
completed
设置为true。

我是dart新手,因此不确定这是否是正确的方法,但我已经通过使用我调用的异步方法返回的
Future
上的函数
whenCompleted()
解决了这个问题

这里
openDatabase
返回一个
Future

abstract class IBaseDatabaseHandler {
  Database sqliteDbHandler;

  IBaseDatabaseHandler.sqlite(String dataBasePath) {
    sqfliteFfiInit();

    var databaseFactory = databaseFactoryFfi;
    databaseFactory
        .openDatabase(dataBasePath)
        .whenComplete(() => sqliteDbHandler);
  }
}

没有办法。最好解释一下您试图通过while循环实现什么。什么是“一切”?
abstract class IBaseDatabaseHandler {
  Database sqliteDbHandler;

  IBaseDatabaseHandler.sqlite(String dataBasePath) {
    sqfliteFfiInit();

    var databaseFactory = databaseFactoryFfi;
    databaseFactory
        .openDatabase(dataBasePath)
        .whenComplete(() => sqliteDbHandler);
  }
}