草庐IT

flutter - 异步和等待任务需要太多时间

coder 2023-07-23 原文

我需要在登录前调用所有 API 并存储一个本地数据库。我使用了 sqflite 插件。 无法添加后台运行,这就是我使用 await 的原因

进程完成后第一次运行 storeRegister(),然后同样运行 storeEquipmentReg。

按钮 onPressed():

await HelperDatabase1().storeRegister(_url, tokens);
await HelperDatabase1().storeEquipmentReg(_url, tokens);
await HelperDatabase1().storeGetUserPreference(_url, tokens);
await HelperDatabase1().storeDefRegisterCat(_url, tokens);
await HelperDatabase1().storeDefCatMaster(_url, tokens);
await HelperDatabase1().storeDefCatRelation(_url, tokens);
await HelperDatabase1().storeWoDescription(_url, tokens);
await HelperDatabase1().storeAssetAssembly(_url, tokens);
await HelperDatabase1().storeCategoryDefect(_url, tokens);
await HelperDatabase1().storeWorkSource(_url, tokens);
await HelperDatabase1().storeWorkTypes(_url, tokens);
await HelperDatabase1().storePriorities(_url, tokens);
await HelperDatabase1().storeSignIn(1);
await HelperSync().insert(_url, tokens);
await Helper().insert(token);
Navigator.pop(context);
Navigator.of(context).pushNamedAndRemoveUntil('/listView', (Route<dynamic> route) => false);

示例 storeCategoryDe​​fect 方法:(所有其他代码相同)

   storeCategoryDefect(String url, String token) async {
    var db = await db1;
    Batch batch = db.batch();
    final response = await http.get(
      '$url/nativeapi/v1.0/CategoryDefect',
      headers: {'Authorization': 'Bearer $token'},
    );
    final jsonResponse = json.decode(response.body);
    CategoryDefect model = CategoryDefect.fromJson(jsonResponse);
    int length = model.data.length;

    for (int i = 0; i < length; i++) {
      var data = DataCategoryDefect(
        i: model.data[i].i,
        d: model.data[i].d,
      );
      batch.insert(
        'CategoryDefectTable',
        data.toMap(),
      );
    }
    await batch.commit();
  }

最佳答案

如果您不需要按特定顺序执行它们,您可以像这样同时执行它们:

await Future.wait([
  HelperDatabase1().storeRegister(_url, tokens),
  HelperDatabase1().storeEquipmentReg(_url, tokens),
  HelperDatabase1().storeGetUserPreference(_url, tokens),
  HelperDatabase1().storeDefRegisterCat(_url, tokens),
  HelperDatabase1().storeDefCatMaster(_url, tokens),
  HelperDatabase1().storeDefCatRelation(_url, tokens),
  HelperDatabase1().storeWoDescription(_url, tokens),
  HelperDatabase1().storeAssetAssembly(_url, tokens),
  HelperDatabase1().storeCategoryDefect(_url, tokens),
  HelperDatabase1().storeWorkSource(_url, tokens),
  HelperDatabase1().storeWorkTypes(_url, tokens),
  HelperDatabase1().storePriorities(_url, tokens),
  HelperDatabase1().storeSignIn(1),
  HelperSync().insert(_url, tokens),
  Helper().insert(token),
]);

如果您需要订购它们,则像您的示例那样创建 await Future.wait 批处理。例如,第一个 Future.wait 中的第一个优先级,第二个在第一个 Future.wait bla bla 之后......

关于flutter - 异步和等待任务需要太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735549/

有关flutter - 异步和等待任务需要太多时间的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  3. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  4. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  5. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  6. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  7. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  8. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  9. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  10. ruby - 为什么在 ruby​​ 中创建 Rational 不需要新方法 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?

随机推荐