当有很多数据要从IndexedDB中提取,而你得到的只是未来时,如何阻止Dart应用程序向前移动?

当有很多数据要从IndexedDB中提取,而你得到的只是未来时,如何阻止Dart应用程序向前移动?,dart,indexeddb,dart-async,Dart,Indexeddb,Dart Async,我尝试将我的应用程序从使用localStorage迁移到使用indexedDB(通过Lawndart)。现在期货的使用正在扰乱我的头脑!实际上,我想做的是:当用户想要加载保存的游戏时,阻止应用程序继续运行,直到所有数据都从indexedDB加载。这不是一个“在股票报价加载时显示天气…”的问题,似乎有很多例子。在我渲染任何东西之前,我需要所有的数据 在我放弃并在我的应用程序中输入所需的点击作为等待未来完成的黑客手段之前,我想做以下事情(使用Lawndart作为我的indexedDb接口),但我无法

我尝试将我的应用程序从使用localStorage迁移到使用indexedDB(通过Lawndart)。现在期货的使用正在扰乱我的头脑!实际上,我想做的是:当用户想要加载保存的游戏时,阻止应用程序继续运行,直到所有数据都从indexedDB加载。这不是一个“在股票报价加载时显示天气…”的问题,似乎有很多例子。在我渲染任何东西之前,我需要所有的数据

在我放弃并在我的应用程序中输入所需的点击作为等待未来完成的黑客手段之前,我想做以下事情(使用Lawndart作为我的indexedDb接口),但我无法用正确的方式来做

  • 加载保存的游戏状态
  • 从游戏中加载保存的玩家数据(300名玩家)
  • 从游戏中加载保存的锦标赛数据(40多个锦标赛,逐个加载和创建对象,也使用流批量尝试。)
  • 使用保存状态中的锦标赛显示刷新DOM
  • 但是#4总是在#3完成并抛出错误之前发生,因为它试图在DOM中呈现的一个锦标赛尚未从循环中完全加载

    我想尝试新的async/await功能(这能解决这个问题吗?),但我也很想知道如何通过futures/completes/etc/etc实现上述功能,因为这让我发疯。 下面是我最后使用的loadGame函数:

    loadGame(字符串\u id){
    如果(_id==null)_id=“a”;
    字符串前缀;
    如果(_id==“a”){
    _前缀=“a”;
    }否则{
    _前缀=_savedGames[_id];
    }
    字符串加载名称;
    //从indexedDb加载的玩家总数
    int numPlayers;
    //加载保存的游戏基础
    _gameStore.getByKey(_前缀+“_游戏”)。然后((LoadedName){
    Map saveObject=JSON.decode(loadedGame);
    _year=int.parse(saveObject[“year”]);
    _week=int.parse(saveObject[“week”]);
    _numWeeks=int.parse(saveObject[“numWeeks]”);
    numPlayers=int.parse(saveObject[“numPlayers]”);
    }).然后(){
    //加载存储的播放器
    _玩家=新地图();
    
    对于(int i=1;i我过去做过,不知道这是否是最好的方法,但似乎有效:-

    List updateList=new List();
    
    对于(int i=1;i当您链接
    Future
    s时,您必须在
    然后
    方法中返回
    Future

    例如,假设
    Player.loadFromDatabase
    返回
    Future
    ,您应该编写:

    然后(){ 最终期货=[]; //加载存储的播放器 _玩家=新地图();
    对于(int i=1;iIt’有趣的是,在JavaScript中使用简单的延续(回调函数)是多么的简单和直接。谢谢!这就成功了。在您的回复和最后两天的搜索答案之间,我想我终于找到了答案。感谢您的帮助!