异步字符串的流类型返回类型

时间:2018-02-22 01:27:08

标签: javascript flowtype

我将async方法的返回类型定义为 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'
}

2 个答案:

答案 0 :(得分: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 "";
}

答案 1 :(得分:1)

“我想发布这个问题有助于我弄明白”

适用于Try / Catch Code

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

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

但我仍然想知道简化类型代码的另一种方法是什么