解决函数里面list.forEach async 不能同步执行的

2021-05-27  本文已影响0人  壹点微尘

原本想通过下面的代码, 使该函数变成同步执行,待图片上传完毕后,打印下结果。不过并未如愿,先执行了打印结果后,才执行了上传图片。故下面的函数行不通!!

  void _onSendTap() async {
    EasyLoading.show();

    _viewModel.list.forEach((element) async {
      if (CYObjectUtil.isNotEmptyString(element.value) && !element.value.contains('http')) {
        String url = await CYOssUpLoad.uploadFile(context, file: File(element.value));
        element.value = url;
      }
    });
    
    EasyLoading.dismiss();

    CYLog.d(_viewModel.list.toJSON());
  }

解决办法,把list.forEach 换成 for in循环, 代码如下:

  void _onSendTap() async {
    EasyLoading.show();

    // 上传图片
    for (CYOrderSurveyOperateModel element in _viewModel.list) {
      if (CYObjectUtil.isNotEmptyString(element.value) && !element.value.contains('http')) {
        String url = await CYOssUpLoad.uploadFile(context, file: File(element?.value));
        element.value = url;
      }
    }

    EasyLoading.dismiss();

    CYLog.d(_viewModel.list.toJSON());
  }
上一篇 下一篇

猜你喜欢

热点阅读