当前位置: 首页 > 知识库问答 >
问题:

异步函数不等待

梁嘉祥
2023-03-14

我正试图将图像上传到firebase存储,但调用该函数时,未执行wait以获取url。我错过了什么?

看看这个其他主题,我发现问题可能是“然后”,但我如何设置代码以等待url?

异步/等待/然后飞镖/颤振

Future < String > uploadImage(File imageFile) async {
  String _imageUrl;
  StorageReference ref =
    FirebaseStorage.instance.ref().child(firebaseUser.uid.toString());

  await(ref.putFile(imageFile).onComplete.then((val) {
    val.ref.getDownloadURL().then((val) {
      _imageUrl = val;
      print(val);
      print("urlupload");
    });
  }));

  print(_imageUrl);
  print("urlnoupload");

  return _imageUrl;

}

谢谢

共有1个答案

慕永年
2023-03-14

当您不需要async/await时,您使用了它,因为您在then函数中捕获了值

Future<String> uploadImage(File imageFile) async {
  String _imageUrl;
  StorageReference ref = FirebaseStorage.instance.ref().child(firebaseUser.uid.toString());
  return ref.putFile(imageFile).onComplete.then((val) {
      return val.ref.getDownloadURL()
  }).then((_imageUrl) {
      return _imageUrl;
  });
},
 类似资料:
  • 问题内容: 目前,我正在尝试在类构造函数中使用。这样一来,我就可以为正在从事的Electron项目获取自定义标签。 但是,目前该项目无法正常工作,并出现以下错误: 有没有办法避免这种情况,以便我可以在其中使用异步/等待?而不需要回调或.then()? 问题答案: 这 永远 行不通。 该关键字允许在标记为函数中使用,但它也是功能转换成一个承诺发生器。因此,标有的函数将返回承诺。另一方面,构造函数返回

  • 问题内容: 我知道这个问题以前曾被问过,但是所有解决方案都不适合我。 我有一个将参数发送到API的函数,并以列表的形式返回数据。我有一个UITableView设置为使用该列表,但是它在列表分配给变量之前运行。 码: 如果不立即将其作为重复投票,我将不胜感激,这是我尝试的方法。 派遣组 信号量计时 运行变量 其中包括= self和= self 。 编辑:要求提取项目, 问题答案: 您不能-也不应该-

  • 我试图为从服务调用异步函数的函数编写测试,但我一辈子都不知道如何让Jasmine在执行expect函数之前等待异步操作完成。 我试图使用Jasmine的“完成”功能,但我不知道如何实现它。 在本例中,只要 调用时,它立即跳转到expect并失败,因为异步操作尚未完成。

  • 问题内容: 我的代码在javascript中看起来像这样: 在完成所有这些异步调用之后,我想计算所有数组的最小值。 我要如何等待所有人? 我现在唯一的想法是拥有一个名为done的布尔数组,并在第i个回调函数中将done [i]设置为true,然后说while(不是全部都完成了){} 编辑:我想一个可能但很丑陋的解决方案是在每个回调中编辑完了的数组,然后如果每个回调中都设置了所有其他完成,则调用一个

  • 所以我在Angular中开发了一个新组件,在ngOninit中我有以下异步函数。。。 这getUserProfile需要完成才能调用它。getPrivateGroup()和这个。需要先完成getPrivateGroup(),然后才能调用此函数。loadGroupPosts()。我知道我可以在异步请求的回调中编写这些函数,但我想知道是否有一种方法可以将它保存在ngOnInit中以保持其更干净? 有人

  • 我在中写了这段代码 然后我尝试在另一个文件中使用它 我得到一个错误 “等待仅在异步函数中有效” 问题是什么?