【问题标题】:Flutter asynchronous http get requests taking so long to fetchFlutter 异步 http get 请求需要很长时间才能获取
【发布时间】:2020-10-12 10:22:02
【问题描述】:

我在 NodeJs 中构建的 REST API 托管在 Heroku 上。在我的颤振应用程序中,要显示一个小部件,我需要来自 7 条相互关联的路线的数据。我正在使用 http get 来获取数据。问题是,http get 请求是异步的,我需要从多个路由结果中获取 10-20 秒才能获取。这是我的代码 sn-p:

void initState() {
    Future.delayed(Duration.zero).then((value) async {
      setState(() {
        _isLoading = true;
      });
      try {
        await Provider.of<UserProvider>(context, listen: false).fetchAllUser();
        await Provider.of<DoctorProfileProvider>(context, listen: false)
            .fetchAllDoctor();
        await Provider.of<CreatedAppointmentProvider>(context, listen: false)
            .fetchAllCreatedAppointment();
        await Provider.of<InstitutionProvider>(context, listen: false)
            .fetchAllInstitution();
        await Provider.of<ReviewProvider>(context, listen: false)
            .fetchAllReview();
        await Provider.of<ChamberProvider>(context, listen: false)
            .fetchAllChamber();
        await Provider.of<AvailableChamberProvider>(context, listen: false)
            .fetchAllAvailableChamber();
      } catch (err) {
        throw err;
      }
      setState(() {
        _isLoading = false;
      });
    });
    super.initState();
  }

我怎样才能最大限度地减少提取时间?

【问题讨论】:

  • 您可以尝试并行执行您的请求。因此,您可以使用await Promise.all([Provider.of&lt;UserProvider&gt;(...).fetchAllUses(), Provider.of&lt;DoctorProfileProvider&gt;(...).fetchAllDoctor(), ...]),而不是await一个接一个的承诺
  • @derpirscher 你能告诉我 Javascript Promise.all() 的 dart 等价物是什么吗?
  • 哦!我明白了。是Future.wait([])

标签: flutter http asynchronous


【解决方案1】:

尝试如下同时请求多个 API,并在收到结果后更新 UI:

import 'dart:async';
import 'dart:convert';

import 'package:http/http.dart' as http;

void main() async {
  final urlList = ['http://google.com', 'http://apple.com'];

  final responses = await Future.wait(
    urlList.map((String url) {
      return http.get(url);
    }),
  );

  final List<dynamic> caches = responses.map((response) {
    return json.decode(response.body);
  }).toList();
}

【讨论】:

  • 虽然我还没试过,你能告诉我会有什么反应吗?我可以为特定 API url 拆分受尊重的数据列表吗?
  • 您将仅在此处按顺序获取 List
猜你喜欢
  • 2016-11-07
  • 1970-01-01
  • 2020-10-17
  • 2020-03-19
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
相关资源
最近更新 更多