【问题标题】:Dart needs to expose functions callbacks in Futures?Dart 需要在 Futures 中暴露函数回调?
【发布时间】:2020-03-29 10:16:08
【问题描述】:

我在 C# 和 Javascript 方面有很强的背景,而且我在 Dart 和 Futures 上没有什么不明白的: 假设我有这样的未来:

scoreFile.exists().then((r) => {
      if (r){
        List<ScoreRow> previousScores = await scoreFile.readAsString();
        scores = jsonDecode(previousScores);
      }
    });

我知道这是不允许的,因为我需要将回调设为 foo() 函数。但是为什么要用只在这个地方使用的代码来混乱空间呢?我的意思是,我真的需要创建与回调一样多的小函数吗? 对于非常复杂的处理,我不会这样做(如果没有放入适当的功能,这将是不可测试的)但是对于这样一个简单的过程? 又或许 Dart 设计是“没有不被测试的简单代码” 因为从语法的角度来看,我的函数已经存在,她只是匿名的:她存储在大括号中:) 感谢您的洞察力:)

【问题讨论】:

标签: dart


【解决方案1】:

我不完全确定问题出在哪里。

您的代码混合了async 和非async 代码,这通常是要避免的,除非绝对必要(这种情况很少发生)。

你或许可以把代码写成:

if (await scoreFile.exists()) {
  scores = jsonDecode(await scoreFile.readAsString());
}

或者你可以继续做你正在做的事情(修复语法和类型问题):

scoreFile.exists().then((r) async {
  if (r) {
    var previousScores = await scoreFile.readAsString();
    return jsonDecode(previousScores);
  }
}).then((scores) {
  // use the scores variable.
});

如果您使用then 方法,那么是的,您将不得不进行很多小回调,因为它就是这样工作的。如果您使用async/await 语法,则会为您进行这些回调。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2018-03-04
    • 2018-06-19
    • 2016-12-05
    相关资源
    最近更新 更多