【问题标题】:Flow type return type for async string异步字符串的流类型返回类型
【发布时间】:2018-02-22 10:20:12
【问题描述】:

我使用 flow-type

将异步方法的返回类型定义为 Promise

如果我添加一个 try catch 循环,它就不起作用了。

请点击示例查看 flow.org/try 上运行的代码

示例 1 不起作用???? - Code

async function foo(): Promise<string> {
  try {
    return await 'foo'
  } catch (e){ console.error(e) }
}

示例 2 作品 ???? - Code

async function foo(): Promise<string> {
  return await 'foo'
}

【问题讨论】:

    标签: javascript flowtype


    【解决方案1】:

    “我想发布这个问题帮助我弄清楚了”

    适用于 Try/Catch ? Code

    async function foo(): Promise<string | void> {
      try{
        return await 'foo'
      } catch (e){ console.error(e) }
    }
    

    我在类型中添加了 | void。 原因是因为 catch 实际上返回了一个等于 void 的未定义值。

    但我仍然想知道还有什么方法可以简化类型代码

    【讨论】:

      【解决方案2】:

      您的catch 表示该函数不会抛出并因此返回void,所以如果您不希望这样,那么您需要重新抛出错误,例如

      try {
        return await 'foo'
      } catch (e){ 
        console.error(e);
        throw e;
      }
      

      让 Flow 知道您只需要字符串返回值。

      但很明显,问题是,为什么你首先要捕获,而不是返回字符串并捕获称为 foo 的任何内容。

      或者,如果您确实想报告错误,但返回一个字符串,那么该字符串应该是什么?你总能做到

      try {
        return await 'foo'
      } catch (e){ 
        console.error(e);
        return "";
      }
      

      【讨论】:

      • 你的回答让我很清楚。我添加了捕获,否则节点会输出有关未处理承诺的警告。
      猜你喜欢
      • 1970-01-01
      • 2019-06-04
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      • 2018-03-02
      相关资源
      最近更新 更多